如何汇总每组熊猫的两个最大值?

时间:2019-10-11 16:28:22

标签: python pandas

我正在浏览以下链接:Return top N largest values per group using pandas

,找到了找到每组前N个值的多种方法。

但是,我更喜欢具有agg函数的字典方法,并且想知道是否有可能针对以下问题获得与字典方法等效的方法?

import numpy as np
import pandas as pd

df = pd.DataFrame({'A': [1,   1,   1,   2,   2],
                   'B': [1,   1,   2,   2,   1],
                   'C': [10,  20,  30,  40,  50],
                   'D': ['X', 'Y', 'X', 'Y', 'Y']})
print(df)
   A  B   C  D
0  1  1  10  X
1  1  1  20  Y
2  1  2  30  X
3  2  2  40  Y
4  2  1  50  Y

我可以这样做:

df1 = df.groupby(['A'])['C'].nlargest(2).droplevel(-1).reset_index()
print(df1)
   A   C
0  1  30
1  1  20
2  2  50
3  2  40

# also this
df1 = df.sort_values('C', ascending=False).groupby('A', sort=False).head(2)
print(df1)

# also this
df.set_index('C').groupby('A')['B'].nlargest(2).reset_index()

必需

df.groupby('A',as_index=False).agg(
    {'C': lambda ser: ser.nlargest(2)  # something like this
    })

在这里可以使用字典吗?

1 个答案:

答案 0 :(得分:1)

如果您想获得像 A这样的字典:C中的2个顶级值, 您可以运行:

df.groupby(['A'])['C'].apply(lambda x:
    x.nlargest(2).tolist()).to_dict()

对于您的DataFrame,结果为:

{1: [30, 20], 2: [50, 40]}