【问题标题】:Sampling a DataFrame in n groups [duplicate]在 n 组中对 DataFrame 进行采样[重复]
【发布时间】:2021-10-05 09:17:33
【问题描述】:

我有一个这样的DataFrame

    a          b    c
0   0   0.326783    1
1   1   0.356272    1
2   2   0.797407    1
3   3   0.098846    1
4   4   0.528812    1
5   5   0.913114    1
6   6   0.630039    2
7   7   0.475828    2
8   8   0.619713    2
9   9   0.756735    2
10  10  0.168544    2
11  11  0.337957    3
12  12  0.201395    3
13  13  0.272564    3
14  14  0.757490    3
15  15  0.032135    4
16  16  0.598143    4
17  17  0.150696    4
18  18  0.001403    4
19  19  0.427624    4

然后,我想在 3 个子组中随机抽样,给定它们的比例(例如[0.5, 0.3, 0.2],但尊重列中标签的比例c

我尝试使用df.groupby('c').sample(frac=...) 进行递归,采样一组,然后采样另一组,等等...

问题是一个组没有得到标签c=3

考虑到子组的给定比例(我上面提到的[0.5, 0.3, 0.2] 列表)以及每个采样子组内标签 c 的比例,最好的方法是什么?

【问题讨论】:

标签: python pandas


【解决方案1】:

您应该可以使用sample 组方法的weights 参数。这给了到达行的权重。只需使用组大小作为权重

df.groupby('c').sample(frac=0.2, weights=df.groupby('c')['c'].transform(len))

注意我无法运行代码进行测试,但你明白了

【讨论】:

  • 谢谢@Henry Yik!
猜你喜欢
  • 2012-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-21
  • 2014-07-12
  • 2019-11-05
  • 2017-05-22
  • 2014-07-03
相关资源
最近更新 更多