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

3
假设我有一个 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对数据进行分组,并获取每个组中前两个最大值(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个回答

3
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.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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接