首页 > 解决方案 > 获取熊猫 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

标签: pythonpandasaggregate-functionspandas-groupby

解决方案


您可以使用GroupBy.aggifsum数字列和countif 字符串,然后Company通过最大值获取DataFrame.idxmax并与max转换为strings 合并,最后在必要时转换Series为一行DataFrameSeries.to_frame转置:

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

推荐阅读