如何用NumPy/Pandas计算列的反向累积求和(行至末尾累积和)
问题描述
现有如下5行2列的矩阵数据:
Volume Weight 1 6 2 7 3 8 4 9 5 10
需求:
- 针对Weight列的每一行,计算从该行到最后一行的求和值;
- 生成包含累积求和列的结果,如下所示:
Volume Weight Cumulative Weight 1 6 40 2 7 34 3 8 27 4 9 19 5 10 10
已知可通过for循环实现,请问是否有更简便的NumPy/Pandas方法解决该问题?
解决方案
当然有更高效的方法,不用手动写循环,直接用库自带的函数就能快速实现:
Pandas 实现
Pandas可以通过cumsum()结合数组反转来实现反向累积求和:
import pandas as pd # 构造原始数据 data = { 'Volume': [1, 2, 3, 4, 5], 'Weight': [6, 7, 8, 9, 10] } df = pd.DataFrame(data) # 计算从当前行到最后一行的累加值 df['Cumulative Weight'] = df['Weight'][::-1].cumsum()[::-1] print(df)
原理很简单:先把Weight列反转,做正向累积求和,再将结果反转回来,就得到了每一行到末尾的累加值。
NumPy 实现
用NumPy的cumsum()也能实现相同逻辑,步骤类似:
import numpy as np # 构造原始数组 arr = np.array([ [1, 6], [2, 7], [3, 8], [4, 9], [5, 10] ]) # 提取Weight列,计算反向累积求和后合并为新数组 cumulative_weight = np.cumsum(arr[:, 1][::-1])[::-1] result = np.column_stack((arr, cumulative_weight)) print(result)
先提取数组的第二列(Weight),反转后做累积求和,再反转回原顺序,最后用column_stack把原数组和新计算的列合并。
内容的提问来源于stack exchange,提问作者pg daszzz
相关产品推荐
相关产品推荐

