# pandas rolling.corr 可以按窗口周期计算 相似性(斜方差)
# 但是 rolling(window= )窗口只能是 d(天) s(秒) 或 固定 int
# 如果窗口 是年(A),或者月(M),或者季度(Q),就不行了,
# 可以将所有月或年 内的日期填平,值补 NAN,这样计算结果一样的,之后在删掉补齐的日期。
# 或者有没有更好的方法,被这个折磨了
df = pd.DataFrame(np.random.randn(1000, 4),
index=pd.date_range('1/1/2000',freq='7D',periods=1000),
columns=['A', 'B', 'C', 'D'])
df.head()
'''
A B C D
2000-01-01 -0.747009 0.404950 -0.154117 0.585156
2000-01-08 -0.895967 -0.325115 -0.272460 -0.919274
2000-01-15 -1.288576 0.662856 0.914934 -1.135986
2000-01-22 0.160453 -0.660789 0.912832 -1.244605
2000-01-29 1.936950 -0.510921 -1.882941 1.788139
'''
d = pd.date_range(start='2000-01-01',end='2019-02-23')
date = pd.DataFrame(np.zeros(len(d)),index=d)
df3 = date.join(df)[df.columns]
df3.head()
'''
A B C D
2000-01-01 -0.747009 0.40495 -0.154117 0.585156
2000-01-02 NaN NaN NaN NaN
2000-01-03 NaN NaN NaN NaN
2000-01-04 NaN NaN NaN NaN
2000-01-05 NaN NaN NaN NaN
'''
A = df3['2014-09-26':'2015-09-26']
A['A'].corr(A['B']) # 0.3241573893873542
B = df['2014-09-26':'2015-09-26']
B['A'].corr(B['B']) # 0.3241573893873542
res = df3['A'].rolling('366d').corr(df3['B'])
res['2015-09-26'] #0.3241573893873542
result = res[df.index]
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.