Python 如何在滚动的基础上从数据帧中获得反向协方差矩阵

Python 如何在滚动的基础上从数据帧中获得反向协方差矩阵,python,dataframe,numpy,covariance,Python,Dataframe,Numpy,Covariance,我有一个由十个不同的投资组合组成的数据框架,期限为12904天。我试图得到每个日期的滚动反向协方差矩阵。我用.rolling()函数得到协方差矩阵。不幸的是,与之相反会产生一个错误。非常感谢您的帮助 数据帧返回(12904行×10列): 我尝试的代码: rolling_cov_inv = np.linalg.inv(excess_return.rolling(750).cov().shift()) 我收到的错误是: LinAlgError: Last 2 dimensions of the a

我有一个由十个不同的投资组合组成的数据框架,期限为12904天。我试图得到每个日期的滚动反向协方差矩阵。我用.rolling()函数得到协方差矩阵。不幸的是,与之相反会产生一个错误。非常感谢您的帮助

数据帧返回(12904行×10列):

我尝试的代码:

rolling_cov_inv = np.linalg.inv(excess_return.rolling(750).cov().shift())
我收到的错误是:

LinAlgError: Last 2 dimensions of the array must be square
我还尝试:

rolling_cov_inv = excess_return.rolling(750).np.linalg.inv(cov()).shift())
此处显示错误消息:

'Rolling' object has no attribute 'np'
每一天的预期输出为10x10矩阵


非常感谢

我想你就快到了。以下代码返回一个序列,其中每个日期对应于750个观测周期内的协方差矩阵:

excess_return.rolling(750).cov().groupby('Date').apply(lambda g: pd.DataFrame(np.linalg.inv(g.values), index=g.index, columns=g.columns))

谢谢这就解决了计算部分。但输出结果并不是我所希望的。我得到的是每个日期的字符串,而不是矩阵。你对此有什么建议吗?@BjarneTimm结果是一个
pd.Series
,即一维。序列中的每个元素都是一个
np.ndarray
。您想要什么输出?我希望它是10维的,这样我每天可以得到一个10x10的矩阵。@BjarneTimm我的更新解决了这个问题吗?@BjarneTimm很高兴它有用-我在学习自己。祝你论文顺利
excess_return.rolling(750).cov().groupby('Date').apply(lambda g: pd.DataFrame(np.linalg.inv(g.values), index=g.index, columns=g.columns))