如何以指定数值为起点按百分比变化率重缩放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,所以对应倍数为1cumprod()会从前到后依次对倍数做累计相乘,天然符合「后一个值等于前一个值乘以当前倍数」的计算逻辑- 整体乘以初始值100,一步得到目标序列
如果是要在DataFrame中新增该列,直接按如下方式赋值即可:
df['新列名'] = (1 + df['原始列名'].pct_change().fillna(0)).cumprod() * 100
你之前循环失败的常见原因
- 没有提前初始化和
b长度一致的空序列,直接按索引赋值会触发索引不存在的报错 - 循环范围和数据实际长度不匹配,比如示例中
a只有3个元素,循环写了range(2, 5)超出了有效索引范围
内容的提问来源于stack exchange,提问作者Apandainfjord
相关产品推荐
相关产品推荐

