python - 基于ID的累积SUM

标签 python pandas

问题:

我有一个从带有 pandas 的“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 不可能有一个包含该金额的记录。

我正在使用 pandas 并操作 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

或者更好(感谢 W-B ):

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

关于python - 基于ID的累积SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54355095/

相关文章:

python - 将字节列表转换为字节字符串

python - 将时区设置为 Pandas 数据框

python - 计算特定行的平均值

python - 如何提取相关性最低的列?

python:从带括号的边创建图形节点

python - imagemagick wand 将 pdf 页面保存为图像

python : use optparse on given list rather than on system command line arguments

python - 当需要用 python pandas 替换字符串时,如何有效避免替换子字符串?

python - 使用 Pandas 按组获取计数

python - 是否可以从服务中使用相同的 gnome 终端窗口