【问题标题】:Resampling of a time series multiindex dataframe时间序列多索引数据帧的重采样
【发布时间】:2021-04-16 14:30:07
【问题描述】:

我有一个包含 12904 天的十个不同投资组合的 DataFrame。我正在尝试使用过去 750 次每日收益来获取该月最后一天的滚动协方差矩阵。我使用 .rolling() 函数获得每日(编辑:仅工作日)协方差矩阵。不幸的是,重新采样该矩阵以获取每日协方差矩阵的最后一个值并不会返回每天的矩阵,而是返回单行。 非常感谢任何帮助!

DataFrame 的excess_return(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'

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

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

    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)]
    

    【讨论】:

    • 只有当月的最后一天实际包含在数据集中时才有效。不过,数据集仅包含工作日。
    • 您是否碰巧有一个解决方案,它不显示数据集中的最后一天,而是显示该月的最后一天?因此,如果一个月中的最后一个工作日是 1 月 29 日星期五,则数据框将显示该日期的值,但日期为 1 月 31 日。
    • 只需要修改索引的值,但索引是不可变的对象。由于这是一个不同的主题,请询问有关修改多索引的另一个问题。
    • 谢谢,我在这里问了一个新问题 :) stackoverflow.com/questions/67145546/…
    猜你喜欢
    • 2017-11-26
    • 1970-01-01
    • 2019-01-30
    • 2018-06-30
    • 2020-12-28
    • 2017-04-05
    • 2022-09-28
    • 2020-07-07
    • 1970-01-01
    相关资源
    最近更新 更多