Python中如何向量化实现DataFrame行的累加更新(替代循环)
向量化实现方案
你要的逻辑完全可以用pandas的cumsum()方法实现,这是纯向量化操作,效率远高于for循环。
步骤说明:
- 先创建一个临时DataFrame,以
tableA为基础,把第一行替换成tableA第一行与tableB第一行的和 - 对这个临时DataFrame按行做累计求和(
axis=0),就能得到你要的结果
代码实现:
import pandas as pd # 构造示例数据 tableA = pd.DataFrame({'A': [10,0,0,7], 'B': [11,0,1,0], 'C': [12,0,2,1]}, index=[1,2,3,4]) tableB = pd.DataFrame({'A': [0,0,0,0], 'B': [0,0,0,0], 'C': [10,0,0,0]}, index=[1,2,3,4]) # 向量化实现 result = tableA.copy() # 替换第一行为tableA第一行+tableB第一行 result.iloc[0] = tableA.iloc[0] + tableB.iloc[0] # 按行累计求和 result = result.cumsum(axis=0) print(result)
输出结果:
A B C 1 10 11 22 2 10 11 22 3 10 12 24 4 17 12 25
原理说明:
cumsum(axis=0)会对每一列从上到下做累计求和,正好对应你要的“上一行结果累加到当前行”的逻辑:
- 第二行 = 第一行结果 + 当前行的tableA值
- 第三行 = 第二行结果 + 当前行的tableA值
- 以此类推
这种方法完全避开了循环,利用pandas的内置向量化运算,处理大数据量时性能提升非常明显。
内容的提问来源于stack exchange,提问作者Sleo
相关产品推荐
相关产品推荐

