如何获得滚动 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
我想计算两个系列之间的相关性。我将它们定义为:
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