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

如何在Pandas中基于已计算值创建累乘新列

在Pandas中基于前一行推导值创建新列(累积乘法)

问题说明

需要创建新列,其中每个值由当前行的现有列值与新列的前一行值相乘得到,具体规则:

  • 新列第1行值为1
  • 从第2行开始,新列值 = 当前行1列的值 × 新列前一行的值

原始数据

import pandas as pd
# 注:原始数据第一行100.0与期望输出逻辑不符,此处调整为1.0以匹配计算规则
df = pd.DataFrame({1: {0: 1.0, 1: 0.96, 2: 0.93, 3: 0.88, 4: 0.85, 5: 0.8}})

数据展示:

1
0  1.0
1  0.96
2  0.93
3  0.88
4  0.85
5  0.80

解决方案

方法1:使用cumprod()(推荐,高效)

该场景本质是累积乘积,直接用Pandas内置的cumprod()方法即可快速实现:

# 创建新列2,值为列1的累积乘积
df[2] = df[1].cumprod()

执行结果:

1          2
0  1.00  1.000000
1  0.96  0.960000
2  0.93  0.892800
3  0.88  0.785664
4  0.85  0.667814
5  0.80  0.534252

方法2:迭代计算(适合自定义复杂逻辑)

如果需要更灵活的自定义规则,可通过迭代每行完成计算:

# 初始化新列,第一行设为1
df[2] = 1.0

# 从第二行开始迭代计算
for i in range(1, len(df)):
    df.loc[i, 2] = df.loc[i, 1] * df.loc[i-1, 2]

该方法结果与cumprod()一致,但效率低于前者,仅适用于非标准化的复杂推导场景。

补充说明

若原始数据第一行确实为100.0,但期望新列第一行是1.0,可先调整列1的第一行值再计算:

df.loc[0, 1] = 1.0
df[2] = df[1].cumprod()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:57:08