python - 获取熊猫 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
解决方案
您可以使用GroupBy.agg
ifsum
数字列和count
if 字符串,然后Company
通过最大值获取DataFrame.idxmax
并与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
推荐阅读
- datetime - 如何在 Julia 中将毫秒数组转换为 MM:SS:ss 格式或 DateTime 格式?
- sql - 如何使用 SQL 中的节点读取 XML 文件中的属性
- node.js - MongoDB如何使用id和更新值更新对象数组
- google-cloud-data-fusion - 关于google数据融合的一些问题
- postgresql - 在 PostgreSQL/PostGIS 中的多边形交叉点内查找点
- reactjs - 如何使用保存在本地存储中的先前创建的表单填充表单并在 React 中对其进行编辑
- java - 如何在对象中搜索数据并转换为列表
- python-3.x - 如何修复在 CMD get 的 DLL 错误中启动的 Python 脚本,但在 Pycharm 和 Anaconda Comand Promt 中运行
- php - Smarty 的审计日志模块
- r - 操纵绘图网格中某些绘图之间的边距