获取pandas groupby对象中多列的最大聚合

时间:2019-04-09 08:21:19

标签: python pandas aggregate-functions pandas-groupby

我有一个数据框,想按“公司”一列分组,汇总多列,然后为每个汇总列找到最大值的公司。

  Company   performed    Requests     Request_Id  Num_of_refunds
0  A         7             60          U9             3
1  A         90            6           U10            2
2  B         89            6           ZX9            10
3  B         2             3           OOF            9         
4  B         22            0           LQI            4 
5  D         7             5           QW             3
6  D         87            2           XB             5

我想将groupby与多个聚合一起使用 将“已执行”,“请求”,“ Num_of_refunds”和 计算为“ Request_Id”

我想要返回每个总数和计数总计最大值的公司名称

performed    Requests     Request_Id  Num_of_refunds
 max          max          max           max
 B: 103       A: 66        B: 3          B: 23

2 个答案:

答案 0 :(得分:1)

如果数字列为sum,则可以将GroupBy.aggcount一起使用;如果为字符串,则可以将{{11}}与Company一起使用,然后将DataFrame.idxmax的最大值作为max并与{{ 1}}转换为string,最后在必要时用Series.to_frameSeries转换为一行DataFrame并转置:

f = lambda x: x.sum() if np.issubdtype(x.dtype, np.number) else x.count()
df1 = df.groupby('Company').agg(f)
print (df1)
         performed  Requests  Request_Id  Num_of_refunds
Company                                                 
A               97        66           2               5
B              113         9           3              23
D               94         7           2               8

df2 = (df1.idxmax() + ': ' + df1.max().astype(str)).to_frame().T
print (df2)
  performed Requests Request_Id Num_of_refunds
0    B: 113    A: 66       B: 3          B: 23

答案 1 :(得分:0)

df.groupby(['Company']).agg({'performed':'sum'
    , 'Requests':'sum'
    , 'Num_of_refunds':'sum'
    ,'Request_Id':'count'})