说我有一些资产
rtns = pd.util.testing.makeTimeDataFrame(5000) # 5000 x 4
stds = pd.rolling_std(rtns, 20) # 5000 x 4
corMat = pd.ewmcorr(rtns, com = 50) # 5000 x 4 x 4
无论出于何种原因,我想分别计算std和相关性并重建协方差矩阵。我可以用循环
来做到这一点out = corMat * 0
for (d,v) in stds.iterrows():
out[d] = np.outer(v,v) * corMat[d]
主要的担心是np.outer丢失了列名,如果stds和corMat中的资产排序不同,则可能会导致不匹配。当然,循环很慢。
是否有一个pandas / numpy操作来替换这个循环(并自动处理资产名称匹配)?
答案 0 :(得分:0)
您可以使用以下内容保留v
的索引
out[d] = pd.DataFrame(np.outer(v, v), v.index, v.index) * corMat[d]