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

如何计算固定Series与滚动DataFrame的相关系数并解决NaN问题?

问题分析与解决

问题根源

出现NaN的核心原因是滚动窗口生成的子Series与固定Series df 的索引不匹配:

  • 滚动窗口的子数据保留了原df1的索引(比如索引4对应的窗口是df1.loc[2:4,'A'],索引为2、3、4),而df的索引是0、1、2。
  • pandas的corr()方法默认按索引对齐数据,无重叠索引时直接返回NaN。

解决方法

修改自定义函数,跳过索引对齐,直接基于数值计算相关系数。可以用numpy.corrcoef实现:

import pandas as pd
import numpy as np

df = pd.Series([2,3,4])
df1 = pd.DataFrame({'A':[1,2,3,4,5,6,7],
                   'B':[10,20,30,40,50,60,70],
                   'C':[100,200,300,400,500,600,700]})

def x(y):
    # 直接用数值计算相关系数,避免索引对齐问题
    return np.corrcoef(y.values, df.values)[0, 1]

df2 = df1.rolling(window=len(df), min_periods=1).apply(x)

运行结果

A    B    C
0  NaN  NaN  NaN
1  1.0  1.0  1.0
2  1.0  1.0  1.0
3  1.0  1.0  1.0
4  1.0  1.0  1.0
5  1.0  1.0  1.0
6  1.0  1.0  1.0

另一种思路:重置索引对齐

也可以在函数内重置滚动窗口子数据的索引,和df对齐后再计算相关系数:

def x(y):
    return y.reset_index(drop=True).corr(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:35:20