获取熊猫 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.agg
与sum
一起使用,如果是数字列,count
如果是字符串,则通过DataFrame.idxmax
的最大值获取Company
并与max
合并,转换为string
s,最后一个如果必要将Series
转换为一行DataFrame
和Series.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 对象中多列的最大聚合的主要内容,如果未能解决你的问题,请参考以下文章