Python 获取每组中n个最大值的平均值

Python 获取每组中n个最大值的平均值,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,假设我有一个名为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

假设我有一个名为
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'
? 有人知道怎么解决这个问题吗?谢谢你的帮助

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