在R语言dplyr中按id分组实现重置式cumsum的方法
解决按ID分组计算Payment累积和的问题
我来帮你搞定这个分组累积和的问题~你遇到的核心问题就是没有先按ID分组就直接计算累积和,导致累加过程跨ID持续进行,没有重置。
正确的实现方法
只需要先通过groupby('id')把数据按ID拆分成独立的组,再对每个组内的payment列计算累积和就可以了,这样每个ID的累积和都会从自身的第一个值开始重新计算。
下面是完整的代码示例:
import pandas as pd # 模拟你的数据框 df = pd.DataFrame({ 'id': [1, 1, 1, 2, 2], 'payment': [100, 150, 50, 75, 125], 'month': ['01', '02', '03', '07', '08'], 'year': [2015, 2015, 2015, 2016, 2016] }) # 新增分组累积和列 df['cumultative_sum'] = df.groupby('id')['payment'].cumsum() # 查看结果 print(df)
运行这段代码后,你就能得到期望的结果:
| id | payment | month | year | cumultative_sum |
|---|---|---|---|---|
| 1 | 100 | 01 | 2015 | 100 |
| 1 | 150 | 02 | 2015 | 250 |
| 1 | 50 | 03 | 2015 | 300 |
| 2 | 75 | 07 | 2016 | 75 |
| 2 | 125 | 08 | 2016 | 200 |
为什么之前的代码不对?
如果你的原始代码是直接对payment列计算全局累积和:
df['cumultative_sum'] = df['payment'].cumsum()
那结果就会是100, 250, 300, 375, 500,因为没有分组,累加会覆盖所有ID,自然不会重置。
内容的提问来源于stack exchange,提问作者Blazej Kowalski
相关产品推荐
相关产品推荐

