获得每组中n个最大值的均值

时间:2018-02-04 01:52:44

标签: python pandas pandas-groupby

假设我在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'? 谁知道如何解决这个?谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

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