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

如何为Pandas Series实现先扩展后固定窗口的pct_change计算

实现思路与代码示例

核心逻辑

  • 前N个元素(索引0到N-1):计算每个元素相对于第一个元素的变化率,公式为 (当前值 - 第一个值) / 第一个值,索引0的结果固定为0
  • 从第N个元素(索引N)开始:使用固定窗口N的变化率,即Pandas原生pct_change(periods=N)的结果

代码实现

通过三步即可完成需求:

  1. 计算原生固定窗口的变化率
  2. 生成前N个元素的自定义变化率序列
  3. 将自定义序列覆盖原生结果中的NaN值

完整代码

import pandas as pd

def custom_pct_change(s, periods):
    # 生成原生固定窗口变化率
    pct_result = s.pct_change(periods=periods)
    # 计算前periods个元素的自定义变化率
    first_value = s.iloc[0]
    initial_pct = (s.iloc[:periods] - first_value) / first_value
    # 替换初始NaN值
    pct_result.iloc[:periods] = initial_pct
    return pct_result

# 测试示例1
s1 = pd.Series([1, 2, 4, 5, 6], name='Numbers')
print("示例1结果:")
print(custom_pct_change(s1, periods=3))

# 测试示例2
s2 = pd.Series([4, 5, 6, 7, 8, 9], name='Numbers')
print("\n示例2结果:")
print(custom_pct_change(s2, periods=3))

输出结果

示例1输出:

0    0.0
1    1.0
2    3.0
3    4.0
4    2.0
Name: Numbers, dtype: float64

示例2输出:

0    0.00
1    0.25
2    0.50
3    0.75
4    0.60
5    0.50
Name: Numbers, dtype: float64

扩展说明

  • 若原Series存在空值,可先通过dropna()或fillna()做预处理
  • 如需支持DataFrame,只需将函数中的iloc操作改为按列遍历处理即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 15:03:50