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

Pandas中首行除外的逐行计算1k增长值问题求助

解决方法

你的问题出在shift(1)只会引用原始DataFrame中上一行的growth_of_1k值,而非计算后更新的值。第三行的shift(1)对应原始的NaN,所以计算结果还是NaN,同时第一行的值会被覆盖成NaN,完全不符合需求。

这里提供两种可靠的解决方式:

方法一:逐行循环计算(直观易懂)

直接遍历从第二行开始的每一行,用上一行已经计算好的growth_of_1k值乘以(1+当年return):

for i in range(1, len(df)):
    df.loc[i, 'growth_of_1k'] = df.loc[i-1, 'growth_of_1k'] * (1 + df.loc[i, 'return'])

运行后你的DataFrame会变成:

yearreturngrowth_of_1k
20100.11000
20110.41400.0
20120.31820.0

方法二:利用累积乘积(更高效)

如果数据量很大,循环效率较低,可以用cumprod()计算(1+return)的累积乘积,再结合初始值生成结果:

# 获取初始的1000美元值
initial_value = df['growth_of_1k'].iloc[0]
# 计算从第二年开始的(1+return)累积乘积
cumulative_growth = (1 + df['return']).iloc[1:].cumprod()
# 拼接初始值和计算后的结果,替换原列
df['growth_of_1k'] = pd.concat([pd.Series([initial_value]), initial_value * cumulative_growth]).reset_index(drop=True)

这种方法和循环的计算结果完全一致,但处理大规模数据时速度更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:11:02