【问题标题】:Pandas randomly select n groups from a larger datasetPandas 从更大的数据集中随机选择 n 个组
【发布时间】:2018-01-07 22:03:27
【问题描述】:

如果我有一个包含这样组的数据框

val label
x   A    
x   A   
x   B
x   B
x   C
x   C
x   D
x   D

如何在不替换的情况下随机抽取n组?

【问题讨论】:

  • 目前还不清楚如何使用for 循环来选择随机项目。能否先提供等价的vanilla Python代码,然后我们可以尝试优化一下。
  • 我的错。我把事情搞糊涂了。更新以反映以下解决方案。

标签: python pandas


【解决方案1】:

您可以将random.choiceloc 一起使用:

N = 3
vals = np.random.choice(df['label'].unique(), N, replace=False) 
print (vals)
['C' 'A' 'B']

df = df.set_index('label').loc[vals].reset_index()
print (df)
  label val
0     C  x5
1     C  x6
2     A  x1
3     A  x2
4     B  x3
5     B  x4

【讨论】:

  • 作为奖励,我将如何评估组的某些特征(例如值的总和),如果未通过测试则丢弃该组?例如。假设我随机抽取 1000 个组,但其中 200 个的组总和太低,所以我丢弃并重新绘制,直到我有 1000 个接受的组?如果您知道如何,我可以编辑我的原始帖子以包括在内。还是我应该开始一个新线程?
  • 好的,但可以先聚合sum,如s = df.groupby('lable')['val'].sum(),然后过滤如b = s[s > 200],然后使用我的解决方案np.random.choice(b.index, N, replace=False)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多