2015-12-22 45 views
0

我有一个数据框和一系列我想要将滚动相关性作为新的数据框返回。熊猫数据帧与系列的相关性

因此,我有df1中的3列,我想返回一个新的数据框,这是每个这些列与Series对象的滚动关联。

import pandas as pd 

df1 = pd.read_csv('https://bpaste.net/raw/d0456d3a020b') 
df1['Date'] = pd.to_datetime(df1['Date']) 
df1 = df1.set_index(df1['Date']) 
del df1['Date'] 


df2 = pd.read_csv('https://bpaste.net/raw/d5cb455cb091') 
df2['Date'] = pd.to_datetime(df2['Date']) 
df2 = df2.set_index(df2['Date']) 
del df2['Date'] 


pd.rolling_corr(df1, df2) 

结果https://bpaste.net/show/58b59c656ce4 给出NaN和1S仅

pd.rolling_corr(df1['IWM_Close'], spy, window=22) 

给出了理想的系列回来了,但我并没有通过数据帧的列要循环。有没有更好的方法来做到这一点?

谢谢。

回答

1

我相信你的第二个输入必须是Series才能与第一个DataFrame中的所有columns相关。

这工作:

index = pd.DatetimeIndex(start=date(2015,1,1), freq='W', periods = 100) 
df1 = pd.DataFrame(np.random.random((100,3)), index=index) 
df2 = pd.DataFrame(np.random.random((100,1)), index=index) 
print(pd.rolling_corr(df1, df2.squeeze(), window=20).tail()) 

,或者对于相同的结果:

df2 = pd.Series(np.random.random(100), index=index) 
print(pd.rolling_corr(df1, df2, window=20).tail()) 

        0   1   2 
2016-10-30 -0.170971 -0.039929 -0.091098 
2016-11-06 -0.199441 0.000093 -0.096331 
2016-11-13 -0.213728 -0.020709 -0.129935 
2016-11-20 -0.075859 0.014667 -0.153830 
2016-11-27 -0.114041 0.019886 -0.155472 

但这并不 - 注意失踪.squeeze() - 只有相关匹配columns

print(pd.rolling_corr(df1, df2, window=20).tail()) 

        0 1 2 
2016-10-30 0.019865 NaN NaN 
2016-11-06 0.087075 NaN NaN 
2016-11-13 0.011679 NaN NaN 
2016-11-20 -0.004155 NaN NaN 
2016-11-27 0.111408 NaN NaN