python - 基于ID的累积SUM
问题描述
问题:
我有一个数据框,我从带有熊猫的“csv”文件导入,看起来像这样(简化示例):
id amount
1 50
1 10
1 5
2 10
2 15
2 25
2 40
所以想法是将金额相加并将结果添加到具有相同 id 的所有记录中,如下所示:
id amount total
1 50 65
1 10 65
1 5 65
2 10 90
2 15 90
2 25 90
2 40 90
因此,生成的数据框应该包含一个额外的列,总计对应于每个 id 的数量,但保留原始数据框,为了使其正常工作,每个 Id 不可能有一条记录与数量。
我正在使用熊猫并操作 csv 文件。
谢谢!
解决方案
利用pandas.join
df.join(df.groupby('id').amount.sum(), rsuffix='_', on = 'id')
输出:
id amount amount_
0 1 50 65
1 1 10 65
2 1 5 65
3 2 10 90
4 2 15 90
5 2 25 90
6 2 40 90
甚至更好(感谢WB):
df.assign(total = df.groupby('id').amount.transform('sum'))
输出
id amount total
0 1 50 65
1 1 10 65
2 1 5 65
3 2 10 90
4 2 15 90
5 2 25 90
6 2 40 90
推荐阅读
- java - 如何接受一个空的整数值?
- javascript - javascript onclick 函数在加载时执行
- c++ - 二叉搜索树的 C++ 删除节点
- javascript - 页面加载时,来自 react-facebook-login 的 FacebookLogin 会被自动调用
- html - SMIL 动画无法使用 SVG spritesheet
- three.js - three.js 中的光线投射如何与屏幕外画布一起使用?
- r - R中列(排列)内值的条件重新排序
- react-native - 反应导航如何回到不同的堆栈
- android-uiautomator - 为什么打开uiautomatorviewer时cmd会报错?
- javafx - 我无法使用带有 JavaFX 12 的 netbeans 11 调试应用程序