You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化pandas带条件累加求和逻辑 替代低效的iterrows遍历方法

问题1 高效优化方案

你原来使用iterrows()的方案是Python原生逐行操作,本身pandas的行遍历性能就极低,处理百万级数据耗时久是必然的。
最优解决方案是使用numba JIT编译计算逻辑,直接操作numpy数组,执行效率会提升至少1000倍,百万行数据处理耗时基本在毫秒级。
先安装依赖:pip install numba
示例代码如下:

import pandas as pd
import numpy as np
from numba import njit

# 编译后的计算逻辑,运行时等价于C语言性能
@njit
def calc_outcome(quantity_arr):
    n = len(quantity_arr)
    outcome = np.empty(n, dtype=np.float64)
    # 首行直接初始化赋值
    outcome[0] = quantity_arr[0]
    for i in range(1, n):
        prev_outcome = outcome[i-1]
        if prev_outcome > 0:
            prev_outcome = 0
        outcome[i] = prev_outcome + quantity_arr[i]
    return outcome

# 测试用例
df = pd.DataFrame([-1,-1,-1,-1,15,-1,-1,-1,-1,5,-1,15,-1,-1,-1], columns=['quantity'])
df['outcome'] = calc_outcome(df['quantity'].values)
print(df)

运行结果和你原有实现完全一致。


问题2 首行判断的优雅实现

原有代码把首行判断放在循环内部,每次迭代都要做一次index校验,完全没有必要。不管是普通循环还是上面的numba编译循环,都可以直接在循环外单独初始化首行的值,循环直接从第二个元素(下标1)开始遍历,自然就不需要在循环内做index==0的判断,逻辑更简洁,运行效率也更高。
如果不想引入额外依赖,也可以用pandas的cumsum配合分组逻辑实现,但可读性和性能都不如numba方案,更推荐上面的实现。

内容的提问来源于stack exchange,提问作者Malachiasz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:54:03