我有一个每日要素收益的熊猫数据框。我希望得到的最终结果是获得VcV矩阵,该VcV矩阵具有使用滚动1.5年(358天)计算的方差对角线和使用滚动3年(756天)窗口计算的不对角线协方差值。为简单起见,我现在同时权衡这些观察结果。
我当前的函数创建了两个协方差矩阵的多索引数据框,然后使用for循环将一个对角线替换为另一个对角线。这行得通;但是,有没有比计算两个多索引数据帧更有效的方法呢?
def blendCovarianceMatrix(daily_returns, var_window = 358, cov_window = 756 ):
varianceMatrix = daily_returns.rolling(int(var_window)).cov()
covarianceMatrix = daily_returns.rolling(int(cov_window)).cov()
datelist = covarianceMatrix.dropna().index.get_level_values("DataDate").unique()
for dates in datelist:
np.fill_diagonal(covarianceMatrix.loc[dates].values,np.diag(varianceMatrix.loc[dates]))
return covarianceMatrix, datelist