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