[英]Resampling of a time series multiindex dataframe
我有一個 DataFrame 十個不同的投資組合回報 12904 天。 我正在嘗試使用過去的 750 次每日回報來獲取每月最后一天的滾動協方差矩陣。 我用 the.rolling() function 得到每日(編輯:僅工作日)協方差矩陣。 不幸的是,重新采樣該矩陣以獲取每日協方差矩陣的最后一個值並不會返回每天的矩陣,而是返回單行。 任何幫助是極大的贊賞!
DataFrame extra_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()
這不會返回錯誤,但不會以矩陣格式返回所需的 output。
我試過的另一個代碼:
rolling_cov.resample("M").last()
帶有錯誤消息:
TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'MultiIndex'
如何獲得滾動協方差,然后僅過濾年月組的最后一個工作日:
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)]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.