Skip to main content
 首页 » 编程设计

python之Pandas 创建没有重复的随机样本

2025年05月04日14pander-it

我有一个包含约 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)]