时间序列多索引数据帧的重采样

2024-05-16 11:27:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由十个不同的投资组合组成的数据框架,期限为12904天。我试图利用过去750天的收益率,得到每月最后一天的滚动协方差矩阵。我使用.rolling()函数获取每日(编辑:仅工作日)协方差矩阵。不幸的是,对该矩阵重新采样以获取每日协方差矩阵的最后一个值不会返回每天的矩阵,而是返回一行。 非常感谢您的帮助

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

             NoDur  Durbl   Manuf   Enrgy   HiTec   Telcm   Shops   Hlth    Utils   Other
Date                                        
1970-01-02   0.0074 0.0188  0.0111  0.0175  0.0069  0.0162  0.0041  -0.0035 0.0159  0.0175
1970-01-05   0.0058 -0.0023 0.0049  0.0099  0.0066  0.0237  -0.0026 -0.0019 0.0122  0.0052
1970-01-06  -0.0032 -0.0135 -0.0085 -0.0107 -0.0050 -0.0002 0.0015  -0.0047 -0.0105 -0.0111
1970-01-07   0.0012 -0.0047 -0.0004 -0.0080 -0.0000 -0.0015 0.0042  0.0007  -0.0038 -0.0012
1970-01-08  -0.0024 -0.0035 0.0021  -0.0034 0.00255 -0.0057 0.0007  0.0062  0.0015  0.0011 

每日滚动协方差矩阵:

 rolling_cov = excess_return.rolling(750).cov().shift()

我尝试的代码:

rolling_cov_monthly = excess_return.rolling(750).cov().shift().groupby([pd.Grouper(level="Date",freq="M")]).last()

这不会返回错误,但不会以矩阵格式返回所需的输出

我试过的另一个代码:

rolling_cov.resample("M").last()

出现以下错误消息:

TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'MultiIndex'

Tags: 数据代码框架利用datereturnshift错误
1条回答
网友
1楼 · 发布于 2024-05-16 11:27:52

获取滚动协方差,然后仅过滤一年中的最后一个工作日-月份组:

rolling_cov = excess_return.rolling(750).cov()
date_index = rolling_cov.index.get_level_values(0)

last_days = (
    pd.Series(date_index)
    .groupby(date_index.strftime('%Y-%m'))
    .last()
)

rolling_cov[rolling_cov.index.get_level_values(0).isin(last_days)]

相关问题 更多 >