我有一个包含约 200,000 行的 pandas 数据框,我想创建 5 个随机样本,每个样本 1000 行,但是我不希望这些样本中的任何一个包含同一行两次。
要创建我一直使用的随机样本:
import numpy as np
rows = np.random.choice(df.index.values, 1000)
sampled_df = df.ix[rows]
然而,仅仅这样做几次就会有重复的风险。处理此问题的最佳方法是跟踪每次对哪些行进行采样吗?
请您参考如下方法:
您可以使用 df.sample .
具有 100 行和 5 列的数据框:
df = pd.DataFrame(np.random.randn(100, 5), columns = list("abcde"))
示例 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
这确保了这 5 行是不同的。如果您想重复此过程,我建议对 number_of_rows * number_of_samples 行进行采样。例如,如果每个示例将包含 5 行,而您需要 10 个示例,则采样 50 行。前5个将是第一个样本,后5个将是第二个...
all_samples = df.sample(50)
samples = [all_samples.iloc[5*i:5*i+5] for i in range(10)]
