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

如何在Pandas中利用列历史值计算依赖前值的新列

在Pandas中实现依赖历史值的Calculated Value计算

问题背景

给定如下Pandas DataFrame:

import pandas as pd

df = pd.DataFrame({
    'Particulars': {0: 'Add', 1: 'Subs', 2: 'Add', 3: 'Subs', 4: 'Add', 5: 'Subs', 6: 'Add', 7: 'Subs'},
    'Addition': {0: 129, 1: 0, 2: 388, 3: 0, 4: 442, 5: 0, 6: 853, 7: 0},
    'Substraction': {0: 0, 1: 32, 2: 0, 3: 102, 4: 0, 5: 200, 6: 0, 7: 589},
    'Expected': {0: 129, 1: 0, 2: 388, 3: 0, 4: 406, 5: 0, 6: 0, 7: 0}
})

需要生成Calculated Value列,计算逻辑:

  • 总扣除量 = 所有Substraction列值的总和(此处为923)
  • 每行计算值取以下二者的最小值:
    1. 当前行的Addition值
    2. 总扣除量 - 截至当前行之前的Calculated Value累计和
  • Subs行的Addition为0,因此计算值直接为0

解决方案

由于计算依赖前序行的结果,无法直接使用矢量化操作,需逐行迭代处理:

import pandas as pd

# 初始化DataFrame
df = pd.DataFrame({
    'Particulars': {0: 'Add', 1: 'Subs', 2: 'Add', 3: 'Subs', 4: 'Add', 5: 'Subs', 6: 'Add', 7: 'Subs'},
    'Addition': {0: 129, 1: 0, 2: 388, 3: 0, 4: 442, 5: 0, 6: 853, 7: 0},
    'Substraction': {0: 0, 1: 32, 2: 0, 3: 102, 4: 0, 5: 200, 6: 0, 7: 589},
    'Expected': {0: 129, 1: 0, 2: 388, 3: 0, 4: 406, 5: 0, 6: 0, 7: 0}
})

# 计算总扣除量
total_sub = df['Substraction'].sum()

# 初始化计算列与累积和变量
df['Calculated Value'] = 0
cumulative_sum = 0

# 逐行处理
for idx, row in df.iterrows():
    if row['Particulars'] == 'Add':
        # 计算剩余可用扣除额度
        remaining_quota = total_sub - cumulative_sum
        # 取当前Addition和剩余额度的最小值
        current_val = min(row['Addition'], remaining_quota)
        df.loc[idx, 'Calculated Value'] = current_val
        # 更新累积和
        cumulative_sum += current_val

# 验证结果
print(df[['Calculated Value', 'Expected']])

运行结果

输出结果与预期列完全匹配:

Calculated Value  Expected
0               129       129
1                 0         0
2               388       388
3                 0         0
4               406       406
5                 0         0
6                 0         0
7                 0         0

逻辑说明

  1. 先计算总扣除量,作为固定的额度上限
  2. 用cumulative_sum跟踪已使用的扣除额度
  3. 对每个Add行,计算剩余可用额度后取最小值,同时更新累积和
  4. Subs行因Addition为0,计算值保持0,不影响累积和

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:40:30