【问题标题】:pandas - groupby and select variable amount of random values according to columnpandas - groupby 并根据列选择可变数量的随机值
【发布时间】:2016-04-22 17:07:19
【问题描述】:

从这个简单的数据框df开始:

df = pd.DataFrame({'c':[1,1,2,2,2,2,3,3,3], 'n':[1,2,3,4,5,6,7,8,9], 'N':[1,1,2,2,2,2,2,2,2]})

我正在尝试为每个cn 中选择N 随机值。到目前为止,我设法分组并获得了一个元素/组:

sample = df.groupby('c').apply(lambda x :x.iloc[np.random.randint(0, len(x))])

返回:

   N  c  n
c         
1  1  1  2
2  2  2  4
3  2  3  8

我的预期输出是这样的:

   N  c  n
c         
1  1  1  2
2  2  2  4
2  2  2  3
3  2  3  8
3  2  3  7

因此,根据N 列,从 c=1 中获取 1 个样本,为 c=2 和 c=3 获取 2 个样本。

【问题讨论】:

  • 您是否假设c 的每个唯一值都只有一个N 唯一值?
  • @BrenBarn 是的,就是这样。

标签: python numpy pandas random


【解决方案1】:

Pandas 对象现在有一个 .sample 方法来返回随机数量的行:

>>> df.groupby('c').apply(lambda g: g.n.sample(g.N.iloc[0]))
c   
1  1    2
2  5    6
   2    3
3  6    7
   7    8
Name: n, dtype: int64

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2021-04-07
    • 2017-05-19
    • 1970-01-01
    • 2021-10-28
    • 2015-11-27
    相关资源
    最近更新 更多