Joh*_*und 2 python multi-index dataframe pandas
在尝试填写所有仪器的日期时,我在处理股票数据时遇到问题,因为较新的仪器从一开始就没有旧仪器所具有的完整时间数据。
\n我想用尚未获得完整时间序列数据的仪器的 NaN 值填写较早的日期。
\n这是数据导入到名为 dfo for dataframeoriginal 的数据框后的样子:
\n Date Open Close High Low Volume Instr_ID\n0 2017-01-02 100.0000 101.0833 102.0000 99.6667 179586.0 2\n1 2017-01-03 101.3333 99.7500 101.8333 99.7500 256812.0 2\n2 2017-01-04 99.8333 100.1667 100.1667 99.4167 204432.0 2\n3 2017-01-05 100.1667 99.9167 100.2500 99.5833 74802.0 2\n4 2017-01-06 99.9167 99.9167 99.9167 99.9167 0.0 2\n... ... ... ... ... ... ... ...\n1182530 2020-04-07 13.2200 13.0000 13.9980 12.7200 5519.0 1932\n1182531 2020-04-08 12.9000 13.1000 13.5000 12.9000 8266.0 1932\n1182532 2020-04-09 13.1000 13.1000 13.1000 13.1000 0.0 1932\n1182533 2020-04-14 14.0000 13.4980 14.0000 12.9000 7363.0 1932\n1182534 2020-04-15 13.8000 13.8000 14.0000 13.2000 2638.0 1932\n
Run Code Online (Sandbox Code Playgroud)\n我成功地部分导出了该数据,将多重索引设置为“instr_ID”和“日期”,然后使用以下命令创建一个新的多重索引:
\ndf1 = dfo.set_index(["Instr_ID","Date"])\n\n Open Close High Low Volume\nInstr_ID Date \n2 2017-01-02 100.0000 101.0833 102.0000 99.6667 179586.0\n 2017-01-03 101.3333 99.7500 101.8333 99.7500 256812.0\n 2017-01-04 99.8333 100.1667 100.1667 99.4167 204432.0\n 2017-01-05 100.1667 99.9167 100.2500 99.5833 74802.0\n 2017-01-06 99.9167 99.9167 99.9167 99.9167 0.0\n... ... ... ... ... ... ...\n1932 2020-04-07 13.2200 13.0000 13.9980 12.7200 5519.0\n 2020-04-08 12.9000 13.1000 13.5000 12.9000 8266.0\n 2020-04-09 13.1000 13.1000 13.1000 13.1000 0.0\n 2020-04-14 14.0000 13.4980 14.0000 12.9000 7363.0\n 2020-04-15 13.8000 13.8000 14.0000 13.2000 2638.0\n\n1182535 rows \xc3\x97 5 columns\n\n\n\n\nstart, end = df.index.levels[1].min(), df.index.levels[1].max()\ndate_range = pd.date_range(start, end)\nnew_index = pd.MultiIndex.from_product([df1.index.levels[0], date_range])\ndf1.reindex(index = new_index)\n
Run Code Online (Sandbox Code Playgroud)\n当尝试部分导出数据时,此方法工作正常,并且即使对于仅从 2020 年 4 月获取数据的仪器 ID 1932,也会填写可追溯到 2017 年的日期。但是,当对完整数据执行相同操作时,它将引发以下错误当尝试使用 new_index 重新索引时:
\nValueError: cannot handle a non-unique multi-index!\n\n
Run Code Online (Sandbox Code Playgroud)\n任何有关我可以采取哪些措施来实现获取所有仪器的所有日期的最终目标的建议将不胜感激!
\n小智 5
我第一次在 stackoverflow 上回答问题:我遇到了同样的问题,但我想我找到了问题所在。您的多索引中可能有重复的索引。在你的情况下,这可能意味着你有重复的 Instr_ID 或者你的数据中有时有重复的日期(我认为后者:更新的仪器提供更详细的数据是有意义的)。确认您的仪器没有在一天内提供多次测量。如果有一些这样做,那么您只需将日期延长到日期时间或在 MultiIndex 中添加第三个级别以适应上午/下午。检查提示:检查索引的长度与 df.index.unique() 的长度
归档时间: |
|
查看次数: |
4758 次 |
最近记录: |