如何在Python DataFrame中对value列执行迭代累加求和操作
实现DataFrame中当前行及后续行的value反向累加求和
嘿,我刚好碰到过类似的需求,给你分享几个简单高效的实现方法!
首先先明确下我们的初始数据:
| t | value |
|---|---|
| 5 | 10 |
| 4 | 0 |
| 3 | 2 |
| 2 | 0 |
| 1 | 1 |
我们要新增一个sum列,每行的sum值是当前行以及之后所有行的value之和,最终得到目标结果:
| t | value | sum |
|---|---|---|
| 5 | 10 | 13 |
| 4 | 0 | 3 |
| 3 | 2 | 3 |
| 2 | 0 | 1 |
| 1 | 1 | 1 |
方法一:用cumsum()结合序列反转
这是最简洁的实现方式,核心思路是把value列倒过来做正向累加,再把结果倒回去,就刚好得到我们需要的反向累加和:
import pandas as pd # 创建初始DataFrame df = pd.DataFrame({ 't': [5, 4, 3, 2, 1], 'value': [10, 0, 2, 0, 1] }) # 生成sum列:反转value→累加→再反转回来 df['sum'] = df['value'][::-1].cumsum()[::-1]
执行完这段代码后,打印df就能得到目标结果啦!
方法二:用expanding().sum()实现
和上面的思路完全一致,只是换用expanding()来做累加(对于一维序列来说,expanding().sum()和cumsum()的效果是完全相同的):
df['sum'] = df['value'].iloc[::-1].expanding().sum().iloc[::-1]
补充说明:如果t列不是倒序的情况
如果你的原始数据t列不是从大到小排列的,建议先按t降序排序,做完累加后再恢复原顺序(如果需要的话):
# 先按t降序排序,保留原索引 df_sorted = df.sort_values('t', ascending=False).copy() # 生成sum列 df_sorted['sum'] = df_sorted['value'][::-1].cumsum()[::-1] # 恢复原顺序 df = df_sorted.sort_index()
这样不管原始数据的顺序如何,都能准确计算每行及后续行的累加和~
内容的提问来源于stack exchange,提问作者Pablo
相关产品推荐
相关产品推荐

