[英]Reindexing MultiIndex pivot table in Pandas
我想重新索引我的 pivot 表,以獲得每日索引鏈。 目前該索引如下所示:
您可以看到,對於某些系列,第一級是從一開始的每月周期性,而對於其他系列,則是每天。
MultiIndex([('1919-01-31', 'PX_LAST', 'M', '2099-12-31'),
('1919-02-28', 'PX_LAST', 'M', '2099-12-31'),
('1919-03-31', 'PX_LAST', 'M', '2099-12-31'),
('1919-04-30', 'PX_LAST', 'M', '2099-12-31'),
('1919-05-31', 'PX_LAST', 'M', '2099-12-31'),
('1919-06-30', 'PX_LAST', 'M', '2099-12-31'),
('1919-07-31', 'PX_LAST', 'M', '2099-12-31'),
('1919-08-31', 'PX_LAST', 'M', '2099-12-31'),
('1919-09-30', 'PX_LAST', 'M', '2099-12-31'),
('1919-10-31', 'PX_LAST', 'M', '2099-12-31'),
...
('2020-06-02', 'PX_LAST', 'D', '2099-12-31'),
('2020-06-03', 'PX_LAST', 'D', '2099-12-31'),
('2020-06-04', 'PX_LAST', 'D', '2099-12-31'),
('2020-06-05', 'PX_LAST', 'D', '2099-12-31'),
('2020-06-06', 'PX_LAST', 'D', '2099-12-31'),
('2020-06-07', 'PX_LAST', 'D', '2099-12-31'),
('2020-06-08', 'PX_LAST', 'D', '2099-12-31'),
('2020-06-08', 'PX_LAST', 'W', '2099-12-31'),
('2020-06-09', 'PX_LAST', 'D', '2099-12-31'),
('2020-06-30', 'PX_LAST', 'M', '2099-12-31')],
names=['date', 'type', 'frequency', 'expiration_date'], length=42368)
我正在獲取每日索引的開始和結束日期,如下所示(piv_table 是我的 pivot 表):
start_date = piv_table.index.min()
end_date = piv_table.index.max()
有了這個,我需要創建一個每日日期時間對象列表,如下所示:
new_dates = pd.date_range(start_date[0], end_date[0], freq='D')
接下來,我正在重新索引數據:
new_pivot = piv_table.reindex(new_dates,level=0).ffill()
但實際上什么也沒發生,我的 new_pivot 表還是一樣的。 指數沒有變化以納入每日變化。 我究竟做錯了什么?
這是我的示例數據:
date type frequency expiration_date ADP LEVL Index ADS BCI Index
1/31/1919 PX_LAST M 12/31/2099 2 3
2/28/1919 PX_LAST M 12/31/2099
3/31/1919 PX_LAST M 12/31/2099
4/30/1919 PX_LAST M 12/31/2099
5/31/1919 PX_LAST M 12/31/2099
6/30/1919 PX_LAST M 12/31/2099
7/31/1919 PX_LAST M 12/31/2099
8/31/1919 PX_LAST M 12/31/2099
9/30/1919 PX_LAST M 12/31/2099
10/31/1919 PX_LAST M 12/31/2099
11/30/1919 PX_LAST M 12/31/2099
12/31/1919 PX_LAST M 12/31/2099
1/31/1920 PX_LAST M 12/31/2099
2/29/1920 PX_LAST M 12/31/2099
3/31/1920 PX_LAST M 12/31/2099
4/30/1920 PX_LAST M 12/31/2099
5/31/1920 PX_LAST M 12/31/2099
6/30/1920 PX_LAST M 12/31/2099
6/1/2020 PX_LAST D 12/31/2099 23 2342
6/1/2020 PX_LAST W 12/31/2099
6/2/2020 PX_LAST D 12/31/2099
6/3/2020 PX_LAST D 12/31/2099
6/4/2020 PX_LAST D 12/31/2099
6/5/2020 PX_LAST D 12/31/2099
6/6/2020 PX_LAST D 12/31/2099
6/7/2020 PX_LAST D 12/31/2099
6/8/2020 PX_LAST D 12/31/2099
6/8/2020 PX_LAST W 12/31/2099
6/9/2020 PX_LAST D 12/31/2099
6/30/2020 PX_LAST M 12/31/2099
這是一種方法:
min_date = df.reset_index()["date"].min()
max_date = df.reset_index()["date"].max()
all_dates = pd.date_range(min_date, max_date, freq="D")
all_dates.name = "date"
pd.DataFrame(index=all_dates).join(df.reset_index().set_index("date")).sort_index().fillna(method="ffill")
結果是(我沒有索引、ADS 和 BSI 的值):
type frequency expiration_date ADP LEVL Index ADS BCI \
date
1919-01-31 PX_LAST M 12/31/2099 2.0 3.0 NaN NaN NaN
1919-02-01 PX_LAST M 12/31/2099 2.0 3.0 NaN NaN NaN
1919-02-02 PX_LAST M 12/31/2099 2.0 3.0 NaN NaN NaN
1919-02-03 PX_LAST M 12/31/2099 2.0 3.0 NaN NaN NaN
1919-02-04 PX_LAST M 12/31/2099 2.0 3.0 NaN NaN NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.