我正在尝试理解pandas.rolling_corr如何计算滚动相关性。到目前为止,我一直使用numpy进行操作。由于速度和易用性,我更喜欢使用pandas,但是我无法获得与以前相同的滚动相关性。
我从两个numpy数组开始:
c = np.array([1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1])
d = np.array([8,9,8])
现在我想计算数组c的长度为3的窗口的交叉相关性。我定义了一个滚动窗口函数:
def rolling_window(a, window):
shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
strides = a.strides + (a.strides[-1],)
return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)
我需要计算我生成的每个窗口和第二个原始数据集之间的相关性。这种方法可以很好地实现:
for win in rolling_window(c, len(d)):
print(np.correlate(win, d))
输出:
[50]
[75]
[100]
[125]
[150]
[175]
[200]
[209]
[200]
[175]
[150]
[125]
[100]
[75]
[50]
如果我尝试使用pandas来解决它:
a = pd.DataFrame([1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1])
b = pd.DataFrame([8,9,8])
无论我使用DataFrame rolling_corr:
a.rolling(window=3, center=True).corr(b)
或者使用Pandas的rolling_corr函数:
pd.rolling_corr(a, b, window=1, center=True)
我只看到了一堆 NaN:
0
0 NaN
1 0.0
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
10 NaN
11 NaN
12 NaN
13 NaN
14 NaN
15 NaN
16 NaN
有人能帮我一下吗?我可以通过将从转换Pandas DataFrame获得的NumPy数组展平来解决NumPy问题。
a.values.ravel()
然而,我希望完全使用pandas解决计算问题。我已经查阅了文档,但没有找到我想要的答案。我错过了什么或者理解有误?
非常感谢您提前的帮助。
D.