python - 在 DataFrame 上使用 groupedby 函数时添加总计
问题描述
假设我有以下 DataFrame
>>> d = {'col1': ['A', 'B', 'A', 'A', 'B'], 'col2': ['q1', 'q2', 'q1', 'q2', 'q1'],
'col3':[1, 2, 1, 4, 5]}
>>> df = pd.DataFrame(data=d)
>>> df
col1 col2 col3
0 A q1 1
1 B q2 2
2 A q1 1
3 A q2 4
4 B q1 5
现在我想按 col1 和 col2 对它进行分组,并在下面添加总计所以我的结果是:
col3
col1 col2
A q1 2
A q2 4
total_A 6
B q1 5
B q2 2
total_B 7
关于如何在保持分组的第 1 列和第 2 列的同时添加此总值的任何想法?最好不要手动,因为我的实际 DataFrame 要大一些
解决方案
分别计算总数并将它们连接在一起:
# First step: GroupBy and sum.
u = df.groupby(['col1', 'col2']).sum()
# Second step: Compute the totals and set a MultiIndex for easy concatenation.
v = u.groupby(level=0).sum()
v.index = pd.MultiIndex.from_arrays([v.index, ['total'] * len(v)])
# Final step: Concat the intermediate results.
pd.concat([v, u]).sort_index(level=0, axis=0)
col3
col1
A q1 2
q2 4
total 6
B q1 5
q2 2
total 7
推荐阅读
- c# - 基于分组c#的WCF服务响应设计
- excel - 根据空单元格位置设置变量偏移
- delphi - 在运行时更新更多图像时的Delphi XE(Firemonkey)问题(android)
- html - 仅使用 CSS 的父 div 的动态大小动画
- python - ValueError:endog 和 exog 矩阵的大小不同 - 如何仅删除特定列中的数据?
- javascript - WebSocket“消息”,流中只有一个结果
- c - 用C将数字序列写入文件
- android - 在 Android 中为每个用户显示来自 Firebase 的课程数据
- android - 身份验证失败:invalid_clientUnauthorized
- node.js - 将 keycloak.protect() 与 express.Router() 一起使用