pandas - 如何聚合多列 - Pandas
问题描述
我有这个df:
ID Date XXX 123_Var 456_Var 789_Var 123_P 456_P 789_P
A 07/16/2019 1 987 551 313 22 12 94
A 07/16/2019 9 135 748 403 92 40 41
A 07/18/2019 8 376 938 825 14 69 96
A 07/18/2019 5 259 176 674 52 75 72
B 07/16/2019 9 690 304 948 56 14 78
B 07/16/2019 8 819 185 699 33 81 83
B 07/18/2019 1 580 210 847 51 64 87
我想按ID
and对 df 进行分组,按最大值Date
聚合列,并按最小值聚合, ,列。XXX
123_Var
456_Var
789_Var
* 注意:df 包含许多这样的列。形状为:{some int}_Var
。
这是我开始编写的当前代码:
df = (df.groupby(['ID','Date'], as_index=False)
.agg({'XXX':'max', list(df.filter(regex='_Var')): 'min'}))
预期结果:
ID Date XXX 123_Var 456_Var 789_Var
A 07/16/2019 9 135 551 313
A 07/18/2019 8 259 176 674
B 07/16/2019 9 690 185 699
B 07/18/2019 1 580 210 847
解决方案
创建字典动态,dict.fromkeys
然后将其与{'XXX':'max'}
dict 合并并传递给GroupBy.agg
:
d = dict.fromkeys(df.filter(regex='_Var').columns, 'min')
df = df.groupby(['ID','Date'], as_index=False).agg({**{'XXX':'max'}, **d})
print (df)
ID Date XXX 123_Var 456_Var 789_Var
0 A 07/16/2019 9 135 551 313
1 A 07/18/2019 8 259 176 674
2 B 07/16/2019 9 690 185 699
3 B 07/18/2019 1 580 210 847
推荐阅读
- javascript - JS onmouseenter() 不传递对象
- user-interface - GAS 在服务器端验证中创建警报 PropertiesService.getScriptProperties() 电子表格 ID
- vba - 如何在单元格中搜索文本,单元格中可能包含多个值
- python - 构建一个 python 轮子:“没有名为 ______ 的模块”
- typescript - 如何使用 Typescript 和 Node 生成 REST API 文档?
- javascript - Jest 对调用返回 Promise 的函数的函数进行单元测试
- azure - Azure DevOps Pipeline AZ CLI 上传批量不推送文件
- liquibase - 我如何使用 liquibase 在不同的模式中创建相同的表
- java - GlowEffectExample.java 是非项目文件,只报语法错误?
- css - 在 100% 高度的容器内填充时意外的 css 溢出