如何在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
相关产品推荐
相关产品推荐

