以动态方式(未经硬编码)从随机生成的数据帧中获取随机样本

时间:2019-07-20 05:27:10

标签: python dataframe random

我写了一些代码,将生成一个随机生成的索引(500行)的数据框。但是,任务是仅从最后50行(从随机生成的数据帧)中获取5个随机选择的行。我设法选择了5行,但问题是它们不是根据需要专门从数据帧的后50个索引中提取的。另外,您不能使用硬编码。

我尝试了以下代码,该代码应仅从数据帧的后50行中选择5行:

def randomly_generated_dataframe(self, df1, select=5, start_range=50, end_range=1):

   selected_indices = np.random.random_integers(len(df1.index[-start_range:]), len(df1.index[:-end_range]), select)
   return df1.loc[selected_indices]

我没有收到任何这样的错误消息,但是输出不正确,因为所选的5行似乎来自dataframe的任何部分,而不仅仅是预期的最后50行。

2 个答案:

答案 0 :(得分:1)

我假设您希望选择行而不替换行,因此选择replace=False

import numpy as np
import pandas as pd

np.random.seed(0)
df = pd.DataFrame(np.random.randint(10, size=(1000, 2)))
df.columns = ['x', 'y']
indices = np.random.choice(df.index[-50:], size=5, replace=False)
result = df.loc[indices]
print(result)

输出:

     x  y
963  9  8
988  6  3
986  6  3
990  9  5
955  1  2

答案 1 :(得分:0)

import random
def randomly_generated_dataframe( df1, select=5, start_range=50): 
    # find the index of selected rows
    selected_indices = random.sample(list(df.index.values), select)[-start_range:]
    # use iloc to avoid index is set up as defalut
    return df1.iloc[selected_indices]

randomly_generated_dataframe( df1)