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

Pandas实现cumsum累计求和正值保留否则置零的方法

非负累计余额计算实现方法

你需要先逐行计算收支净额,再按每一步累计结果非负的规则迭代计算Total列,不能直接对错误的累计结果做裁剪,也不需要用apply逐行操作(效率低且逻辑容易写错)。

实现代码

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'Incoming': [0, 10, 100, 50],
    'Outgoing': [150, 20, 30, 70]
})

# 计算单期收支净额
df['net'] = df['Incoming'] - df['Outgoing']

# 自定义非负累计函数
def calc_non_neg_cumulative(net_series):
    current_balance = 0
    total_list = []
    for net_val in net_series:
        current_balance += net_val
        current_balance = max(current_balance, 0)
        total_list.append(current_balance)
    return total_list

# 生成目标Total列
df['Total'] = calc_non_neg_cumulative(df['net'])

运行后输出的df的Total列和你期望的结果完全一致:[0, 0, 70, 50]

原有方法错误原因

  • df.clip(lower=0)仅能对已有的值做下限裁剪,你原来的Total列本身累计逻辑错误,直接裁剪后还是不符合要求。
  • 你写的apply方法存在多处错误:lambda内直接引用整列而非单行值、收支相减顺序写反、没有实现累计逻辑、缺少else分支语法不完整,因此无法得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:06:03