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

如何以指定数值为起点按百分比变化率重缩放pandas数据列

实现方案

直接使用pandas内置的cumprod()累计乘积函数即可,完全不需要手写循环,执行效率更高也不会出现索引错误。

代码示例

import pandas as pd

# 你的原始数据
a = pd.Series([4, 5, 6])
# 计算增长率
b = a.pct_change().fillna(0)
# 核心逻辑:先算环比倍数的累计乘积,再乘以初始值100
c = (1 + b).cumprod() * 100

执行后得到的c结果为:

0    100.0
1    125.0
2    150.0
dtype: float64

完全匹配你需要的输出结果。

原理解释

  • 1 + b会把每个位置的增长率转换为环比倍数,第一个位置因为增长率为0,所以对应倍数为1
  • cumprod()会从前到后依次对倍数做累计相乘,天然符合「后一个值等于前一个值乘以当前倍数」的计算逻辑
  • 整体乘以初始值100,一步得到目标序列
    如果是要在DataFrame中新增该列,直接按如下方式赋值即可:
df['新列名'] = (1 + df['原始列名'].pct_change().fillna(0)).cumprod() * 100

你之前循环失败的常见原因

  • 没有提前初始化和b长度一致的空序列,直接按索引赋值会触发索引不存在的报错
  • 循环范围和数据实际长度不匹配,比如示例中a只有3个元素,循环写了range(2, 5)超出了有效索引范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:54:02