如何获得滚动 pandas 系列和固定系列的相关性?

How to get correlation for a rolling pandas series and a fixed series?

我想计算两个系列之间的相关性。我将它们定义为:

s = pd.Series([1,2,3,4,5,6,7])
s2 = pd.Series([2,3,4])

我想要的是相关序列,值是 s.rolling(3) 与 s2

之间的相关值

例如:result的第一个元素应该是[1,2,3].corr(s2),第二个应该是[2,3,4].corr(s2), .....

我看过rolling的用法示例,但我认为内部方法rolling(3).corr不能解决这个问题, 有什么好的方法吗?

为什么不直接使用 for 循环?

import pandas as pd
s = pd.Series([1,2,3,4,5,6,7])
s2 = pd.Series([2,3,4])
window_size = len(s2)

output = []
for i in range(len(s)-window_size):
    output.append(s[i:window_size+i].corr(s2))

可以滚动申请吗:

from scipy.stats import pearsonr
s.rolling(3).apply(lambda x: pearsonr(x,s2)[0])

输出:

0    NaN
1    NaN
2    1.0
3    1.0
4    1.0
5    1.0
6    1.0
dtype: float64