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