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

Posted

技术标签:

【中文标题】获取熊猫 groupby 对象中多列的最大聚合【英文标题】:Get Max aggregations for multiple columns in pandas groupby object 【发布时间】:2019-08-30 11:19:58 【问题描述】:

我有一个数据框,想按一列“公司”进行分组并聚合多列,然后找到每个聚合列的最大值的公司。

  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”

我想要返回每个 sum 和 count 聚合的最大值的公司名称

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

【问题讨论】:

【参考方案1】:

您可以将GroupBy.aggsum 一起使用,如果是数字列,count 如果是字符串,则通过DataFrame.idxmax 的最大值获取Company 并与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

【讨论】:

我收到 NotImplementedError:不支持 0 以外的轴 @TH14 - 你的熊猫版本是什么? 我在 python 3.7 和 pandas '0.23.4' 上运行 @TH14 - 是DataFrame.T - 转置函数 哦,好棒。【参考方案2】:
df.groupby(['Company']).agg('performed':'sum'
    , 'Requests':'sum'
    , 'Num_of_refunds':'sum'
    ,'Request_Id':'count')

【讨论】:

以上是关于获取熊猫 groupby 对象中多列的最大聚合的主要内容,如果未能解决你的问题,请参考以下文章

查找熊猫索引数据帧的最小值和最大值

在熊猫中使用 groupby 或聚合的最佳方法

如何在熊猫的 groupby 对象中获取组数?

pandas groupby 聚合具有多列的自定义函数

大熊猫中日期时间列的日期级别的groupby聚合

Python pandas groupby 在多列上聚合,然后旋转