【问题标题】:Getting mean for n-largest values in each group获取每组中 n 最大值的平均值
【发布时间】:2018-02-04 10:17:16
【问题描述】:

假设我在 Pandas 中有一个名为 df 的数据框,如下所示:

 id    x      y
 1     10     A
 2     12     B
 3     10     B
 4     4      C
 5     9      A
 6     15     A
 7     6      B

现在我想按 y 列对数据进行分组,并获得每个组的 2 个最大值 (x) 的平均值,看起来像这样

y     
A      (10+15)/2 = 12.5
B      (12 + 10)/2 = 11
C      4

如果我尝试使用df.groupby('y')['x'].nlargest(2),我会得到

y    id    
A    1    10
     6    15
B    2    12
     3    10
C    4    4

类型为pandas.core.series.Series。因此,当我执行df.groupby('y')[x].nlargest(2).mean() 时,我得到所有数字的平均值,而不是 3 个平均值,每个组一个平均值。最后,我想绘制组在 x 轴上和在 y 轴上的意思的结果,所以我猜我也应该删除列 'id' 吗? 有谁知道如何解决这个问题?谢谢你的帮助!

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:
    df.groupby('y')['x'].nlargest(2).mean(level=0)
    Out: 
    y
    A    12.5
    B    11.0
    C     4.0
    Name: x, dtype: float64
    

    请注意,这是按 'y' 分组两次(mean(level=0) 是另一个 groupby,但它是在索引上完成的,因此速度更快)。 groupby.apply 根据组的数量可能会更有效,因为在这种特殊情况下它只需要分组一次。

    df.groupby('y')['x'].apply(lambda ser: ser.nlargest(2).mean())
    Out: 
    y
    A    12.5
    B    11.0
    C     4.0
    Name: x, dtype: float64
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2013-11-28
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 2021-02-14
      相关资源
      最近更新 更多