【发布时间】:2020-07-07 10:59:02
【问题描述】:
在尝试填写所有工具的日期时,我在处理库存数据时遇到问题,因为较新的工具从一开始就没有旧工具所拥有的全部时间数据。
对于尚未获得完整时间序列数据的工具,我想用 NaN 值填写较早的日期。
这是数据导入到名为 dfo for dataframeoriginal 的数据帧后的样子:
Date Open Close High Low Volume Instr_ID
0 2017-01-02 100.0000 101.0833 102.0000 99.6667 179586.0 2
1 2017-01-03 101.3333 99.7500 101.8333 99.7500 256812.0 2
2 2017-01-04 99.8333 100.1667 100.1667 99.4167 204432.0 2
3 2017-01-05 100.1667 99.9167 100.2500 99.5833 74802.0 2
4 2017-01-06 99.9167 99.9167 99.9167 99.9167 0.0 2
... ... ... ... ... ... ... ...
1182530 2020-04-07 13.2200 13.0000 13.9980 12.7200 5519.0 1932
1182531 2020-04-08 12.9000 13.1000 13.5000 12.9000 8266.0 1932
1182532 2020-04-09 13.1000 13.1000 13.1000 13.1000 0.0 1932
1182533 2020-04-14 14.0000 13.4980 14.0000 12.9000 7363.0 1932
1182534 2020-04-15 13.8000 13.8000 14.0000 13.2000 2638.0 1932
我成功地部分导出了此数据,将多索引设置为“instr_ID”和“日期”,然后创建了一个新的多索引:
df1 = dfo.set_index(["Instr_ID","Date"])
Open Close High Low Volume
Instr_ID Date
2 2017-01-02 100.0000 101.0833 102.0000 99.6667 179586.0
2017-01-03 101.3333 99.7500 101.8333 99.7500 256812.0
2017-01-04 99.8333 100.1667 100.1667 99.4167 204432.0
2017-01-05 100.1667 99.9167 100.2500 99.5833 74802.0
2017-01-06 99.9167 99.9167 99.9167 99.9167 0.0
... ... ... ... ... ... ...
1932 2020-04-07 13.2200 13.0000 13.9980 12.7200 5519.0
2020-04-08 12.9000 13.1000 13.5000 12.9000 8266.0
2020-04-09 13.1000 13.1000 13.1000 13.1000 0.0
2020-04-14 14.0000 13.4980 14.0000 12.9000 7363.0
2020-04-15 13.8000 13.8000 14.0000 13.2000 2638.0
1182535 rows × 5 columns
start, end = df.index.levels[1].min(), df.index.levels[1].max()
date_range = pd.date_range(start, end)
new_index = pd.MultiIndex.from_product([df1.index.levels[0], date_range])
df1.reindex(index = new_index)
这在尝试部分导出数据时效果很好,并且即使对于仅从 2020 年 4 月获取数据的仪器 ID 1932 也可以填写追溯到 2017 年的日期。但是当对完整数据执行相同操作时,它会提高尝试使用 new_index 重新索引时出现以下错误:
ValueError: cannot handle a non-unique multi-index!
任何关于我可以做些什么来实现获得所有乐器的所有日期的最终目标的建议将不胜感激!
【问题讨论】:
标签: python pandas dataframe multi-index