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

如何用Pandas基于上一行值与另一列值相乘创建新列?

解决方法

你的需求本质是计算累积乘积,用pandas内置的cumprod()函数就能直接实现,完全不需要手动处理shift或者循环,代码如下:

import pandas as pd

# 你的示例数据
data = {
    'time': [0, 1, 2, 3, 4],
    'val': [1, 0.5, 0.6, 0.7, 0.9]
}
df = pd.DataFrame(data)

# 生成adj_val列
df['adj_val'] = df['val'].cumprod()

运行后得到的结果和你给出的示例完全一致:

timevaladj_val
011.0
10.50.5
20.60.3
30.70.21
40.90.189

为什么你之前的代码没成功?

你先设置了第一行的new_col,但后续执行df['new_col'] = df['new_col'].shift(1)*df['other_col']时,df['new_col']除了第一行有值,其他行都是NaN。shift(1)后,第二行能取到第一行的值,但第三行及以后取到的都是NaN,相乘后结果自然不对,而且这行代码会直接覆盖掉你之前设置的第一行值,导致最终只有第二行有有效数据。


特殊情况处理(如果首行值不是val列的首行)

如果你的首行adj_val不是val的首行值,比如首行需要设为某个固定值(比如2),再乘后续的val,可以这样写:

# 首行设为固定值,后续累积乘val
df['adj_val'] = pd.concat([pd.Series([2]), df['val'].iloc[1:]]).cumprod()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:23:18