熊猫创建没有重复的随机样本

GNM*_*O11 2 python pandas

我有一个包含 ~200,000 行的 Pandas 数据框,我想创建 5 个随机样本,每个样本 1000 行,但是我不希望这些样本中的任何一个包含同一行两次。

要创建我一直使用的随机样本:

import numpy as np
rows = np.random.choice(df.index.values, 1000)
sampled_df = df.ix[rows]
Run Code Online (Sandbox Code Playgroud)

然而,仅仅这样做几次就会冒着重复的风险。处理这个问题的最好方法是跟踪每次采样哪些行?

ayh*_*han 7

您可以使用df.sample.

一个 100 行 5 列的数据框:

df = pd.DataFrame(np.random.randn(100, 5), columns = list("abcde"))
Run Code Online (Sandbox Code Playgroud)

样本 5 行:

df.sample(5)
Out[8]: 
           a         b         c         d         e
84  0.012201 -0.053014 -0.952495  0.680935  0.006724
45 -1.347292  1.358781 -0.838931 -0.280550 -0.037584
10 -0.487169  0.999899  0.524546 -1.289632 -0.370625
64  1.542704 -0.971672 -1.150900  0.554445 -1.328722
99  0.012143 -2.450915 -0.718519 -1.192069 -1.268863
Run Code Online (Sandbox Code Playgroud)

这确保了这 5 行是不同的。如果你想重复这个过程,我建议采样 number_of_rows * number_of_samples 行。例如,如果每个样本将包含 5 行,而您需要 10 个样本,则采样 50 行。前 5 个将是第一个样本,后五个将是第二个......

all_samples = df.sample(50)
samples = [all_samples.iloc[5*i:5*i+5] for i in range(10)]
Run Code Online (Sandbox Code Playgroud)