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

Pandas 1.5.0中rolling的step参数在corr方法中无法使用的解决咨询

解决滚动相关系数的step参数问题

问题原因

Pandas的rolling.corr()方法目前不支持step参数,即使rolling对象本身支持step,这就是你遇到NotImplementedError的核心原因。

两种可行实现方式

方式1:手动遍历窗口索引

直接生成符合step要求的窗口起始位置,逐个计算窗口内的相关系数:

import pandas as pd

# 获取数据总长度
n = len(df)
# 生成窗口起始索引(确保窗口结束不超出数据范围)
start_indices = range(0, n - 125 + 1, 20)

# 存储结果与对应索引
corr_results = []
corr_index = []

for i in start_indices:
    # 截取当前窗口的目标列数据
    window_data = df.iloc[i:i+125][['600028.SS', '600121.SS']]
    # 计算两列的皮尔逊相关系数
    corr = window_data['600028.SS'].corr(window_data['600121.SS'])
    corr_results.append(corr)
    # 记录窗口结束位置的索引(可根据需求改为起始位置)
    corr_index.append(df.index[i+124])

# 转为Series方便后续分析
corr_series = pd.Series(corr_results, index=corr_index)
print(corr_series)

方式2:使用rolling.apply()自定义计算

利用rolling.apply()支持step参数的特性,自定义相关系数计算逻辑:

import pandas as pd

# 定义窗口内相关系数计算函数
def window_corr(window_df):
    # window_df为每个滚动窗口的DataFrame
    return window_df['600028.SS'].corr(window_df['600121.SS'])

# 执行滚动计算,必须设置raw=False以传递DataFrame而非数组
corr_series = df[['600028.SS', '600121.SS']].rolling(
    window=125,
    step=20
).apply(window_corr, raw=False)

# 过滤无有效计算结果的NaN行
corr_series = corr_series.dropna()
print(corr_series)

注意事项

  • 确保你的Pandas版本≥1.5.0,否则step参数本身不被支持;
  • 方式2中raw=False是必要设置,否则函数会收到numpy数组,无法通过列名索引数据;
  • 结果索引默认对应窗口的结束位置,可根据业务需求调整为起始位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:45:32