pandas 每次从不同数量的数据中随机抽取样本

eit6fx6z  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(226)

我有一个Pandas Dataframe ,我想从其中随机选取样本。第一次我想选取10个,然后是20,30,40,50个随机样本(没有替换)。我试图用一个for循环来做,尽管我不知道这有多好,因为一个列表不能包含 Dataframe ,对吗?(我的代码用R更好,列表可以包含 Dataframe )。

number = [10,20,30,40,50]
sample = []
for i in range(len(number)):
    sample[i].append(data.sample(n = number[i]))

误差为IndexError: list index out of range
我不想复制过去的代码,那么什么是正确的方式来做呢?

8i9zcol2

8i9zcol21#

尝试range(len(number)-1)。原因是for循环从0开始到n。所以在本例中,它将从0开始,然后到5。总共有6个循环(0,1,2,3,4,5)。这就是为什么你的列表超出范围

w7t8yxp5

w7t8yxp52#

你可以使用radint方法从列表number中选择随机元素来实现这一点:

import random    
number = [10,20,30,40,50]
sample = []
for i in range(len(number)):
    sample.append(data.sample(n = number[random.randint(0, len(number)-1]))

更新:

假设您有Movies Rating数据集的 Dataframe :

data = [['avengers', 5.4 ,'PG-13'],
['captain america', 6.7, 'PG-13'],
['spiderman', 7,    'R'],
['daredevil', 8.2, 'R'],
['iron man', 8.6, 'PG-13'],
['deadpool', 10, 'R']]

df = pd.DataFrame(data, columns=['title', 'score', 'rating'])

您可以使用sample方法从中随机取样:

# taking random 3 records from dataframe
samples = df.sample(3)

输出量:

title  score rating
1  captain america    6.7  PG-13
5         deadpool   10.0      R
3        daredevil    8.2      R

另一个执行:

title  score rating
4   iron man    8.6  PG-13
0   avengers    5.4  PG-13
2  spiderman    7.0      R

此外,您还可以根据 Dataframe **#**的行数随机分配样本数:

df.sample(random.randint(1, len(df)))
备选方法:

如果需要,您可以编写自己的函数,通过以下方式从 Dataframe 生成随机样本:

import random   
def generate_rand_sample(df):
    start_i = end_i = 0
    while end_i == start_i:
        start_i = random.randint(0, len(df) - 1)
        end_i = random.randint(start_i, len(df))
    return df.iloc[start_i:end_i]

generate_rand_sample(df)

首次运行:

title  score rating
1  captain america    6.7  PG-13
2        spiderman    7.0      R

第二次运行:

title  score rating
2  spiderman    7.0      R
3  daredevil    8.2      R
4   iron man    8.6  PG-13
5   deadpool   10.0      R

相关问题