我是python的新手,我正在尝试计算不同股票回报之间的滚动交叉相关性。我的数据框很大,它包含很多NaN。因此,rolling_corr()似乎不能很好地工作。
这是我的数据框的一部分 enter image description here
我创建了一个生成相关矩阵的函数,并以下列方式将其展开回数据框:
def corr_func(df,n=None):
cmat = df.corr(method='pearson', min_periods=n)
mask = np.ones(cmat.shape,dtype='bool')
mask[np.triu_indices(len(cmat))] = False
dfnew = cmat[cmat.notnull()&mask]
dfnew = dfnew.stack()
dfnew = dfnew.reset_index(level=1)
dfnew.columns = ['PERMNO2','Value']
dfnew.reset_index(inplace=True)
dfnew=dfnew.rename(columns = {'PERMNO':'PERMNO1'})
# Associate with the window (first date and last date)
df.reset_index(inplace=True)
df.sort_values('date',inplace=True)
dfnew['date_first'] = df['date'].iloc[0]
dfnew['date_last'] = df['date'].iloc[-1]
return(dfnew)
结果数据框汇总了样本中股票收益的唯一成对关联。以下是结果数据框的一部分: enter image description here
我尝试使用rolling_apply和此函数(corr_func)实现滚动交叉关联,但没有任何成功。 是否有一种优雅的方法可以使用rolling_apply或其他方法聚合数据框中的滚动互相关?