使用具有不同滚动窗口的对角线和非对角线值计算协方差矩阵的Python方法。大熊猫

时间:2019-12-13 13:28:35

标签: python pandas numpy matrix covariance

我有一个每日要素收益的熊猫数据框。我希望得到的最终结果是获得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

0 个答案:

没有答案