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

如何在Pandas DataFrame中基于上一行的两列值计算当前行的Lower_Value

如何在Pandas DataFrame中基于上一行的两列值计算当前行的Lower_Value

我明白你的需求了——你希望把原Value列作为新的Upper_Value,而Lower_Value则是上一行Lower_Value与Upper_Value的总和,第一行的Lower_Value固定为0。

先说说你当前代码的问题:你的逻辑是把上一行的Upper_Value加上当前行的Upper_Value,这和你实际需要的“上一行两列的总和”不符,所以得到的结果会出错。另外还有个小拼写问题,df.upper_value应该是df['Upper_Value'](列名要和你定义的一致,注意大小写)。

咱们可以用更简洁的方式实现需求,利用Pandas的累积求和(cumsum)结合位移(shift)就能搞定,步骤如下:

  1. 把原Value列直接赋值给新的Upper_Value列;
  2. 计算Upper_Value的累积和,再把这个结果整体向下位移一行,最后用0填充第一行的空值,得到的就是我们需要的Lower_Value。

对应的完整代码:

import pandas as pd

# 构造你的原始DataFrame
df = pd.DataFrame({
    'Name': ['A', 'B', 'C', 'D'],
    'Value': [2400, -400, 400, 0]  # 这里匹配你给出的期望输出调整了D的Value,若原数据是600直接替换即可
})

# 生成Upper_Value列
df['Upper_Value'] = df['Value']
# 生成Lower_Value列:累积和位移后填充初始0
df['Lower_Value'] = df['Upper_Value'].cumsum().shift(1).fillna(0)

# 调整列顺序,匹配你期望的格式
df = df[['Name', 'Lower_Value', 'Upper_Value']]
print(df)

运行后输出的结果和你期望的完全一致:

Name  Lower_Value  Upper_Value
0    A          0.0         2400
1    B       2400.0         -400
2    C       2000.0          400
3    D       2400.0            0

简单解释下逻辑:cumsum()会计算Upper_Value的累积和,比如第一行是2400,第二行是2400+(-400)=2000,第三行是2000+400=2400,第四行是2400+0=2400。然后shift(1)把这个累积和向下移动一行,第一行就变成了NaN,我们用fillna(0)替换成初始值0;第二行的Lower_Value正好是第一行的累积和(也就是第一行Lower+Upper的总和),以此类推,完美符合你的需求。

备注:内容来源于stack exchange,提问作者SM079

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 10:50:29