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

如何在Pandas DataFrame中递推计算Stawka E列的后续值

递推计算Stawka E列的解决方案

问题需求

需按以下规则递推计算Stawka E列的值:

  • 2024年Stawka E = 2023年Stawka E × 2023年CPI/100
  • 2025年Stawka E = 2024年Stawka E × 2024年CPI/100
  • 以此类推

原始代码问题

你之前的代码通过np.where和apply尝试计算,但无法实现递推逻辑——向量式运算不会逐行更新Stawka E的值,shift(1)始终取初始的2023年值,而非上一行计算后的结果。原始代码如下:

import numpy as np
import pandas as pd

st_opl_prze_dict ={
    "Rok" : [2023,2024,2025,2026,2027],
    "Stawka E" : [2.275, np.NaN, np.NaN, np.NaN, np.NaN],
    "Stawka Ln" : [2.275, np.NaN, np.NaN, np.NaN, np.NaN],
    "CPI" : [11.9, 5.2, 3.6, 3, 2 ]
}
st_opl_prze = pd.DataFrame(st_opl_prze_dict)
st_opl_prze["Stawka E"] = np.where(st_opl_prze["Stawka E"].isnull(),
                                   st_opl_prze["Stawka E"].apply(lambda x: st_opl_prze["Stawka E"].shift(1) * st_opl_prze["CPI"] / 100),
                                   st_opl_prze["Stawka E"])

解决方案

提供两种可行的实现方式:

方法1:循环迭代(直观易懂)

通过逐行遍历,用上一行的计算结果更新当前行,完美匹配递推逻辑:

import numpy as np
import pandas as pd

st_opl_prze_dict ={
    "Rok" : [2023,2024,2025,2026,2027],
    "Stawka E" : [2.275, np.NaN, np.NaN, np.NaN, np.NaN],
    "Stawka Ln" : [2.275, np.NaN, np.NaN, np.NaN, np.NaN],
    "CPI" : [11.9, 5.2, 3.6, 3, 2 ]
}
st_opl_prze = pd.DataFrame(st_opl_prze_dict)

# 从第2行(索引1)开始递推计算
for i in range(1, len(st_opl_prze)):
    st_opl_prze.loc[i, 'Stawka E'] = st_opl_prze.loc[i-1, 'Stawka E'] * st_opl_prze.loc[i-1, 'CPI'] / 100

print(st_opl_prze)

方法2:累积乘积(高效向量运算)

利用cumprod()计算CPI的累积乘积,结合初始值一次性生成结果,适合大数据量场景:

import numpy as np
import pandas as pd

st_opl_prze_dict ={
    "Rok" : [2023,2024,2025,2026,2027],
    "Stawka E" : [2.275, np.NaN, np.NaN, np.NaN, np.NaN],
    "Stawka Ln" : [2.275, np.NaN, np.NaN, np.NaN, np.NaN],
    "CPI" : [11.9, 5.2, 3.6, 3, 2 ]
}
st_opl_prze = pd.DataFrame(st_opl_prze_dict)

# 填充初始值,计算上一年CPI的累积乘积并应用
st_opl_prze['Stawka E'] = st_opl_prze['Stawka E'].ffill() * (1 + st_opl_prze['CPI'].shift(1)/100).cumprod().fillna(1)

print(st_opl_prze)

结果验证

两种方法都会得到如下正确结果(保留三位小数):

RokStawka EStawka LnCPI
20232.2752.27511.9
20242.5462.2755.2
20252.6782.2753.6
20262.7582.2753.0
20272.8132.2752.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:08:16