我有一个 Pandas 事件数据框,列中有时间戳作为索引和一些标量值(它的含义在这里不是那么重要)。我想绘制一个时间序列,在任何一个小时内发生了多少事件。
原始数据(比此处显示的要多得多)如下所示:
size
timestamp
2015-08-17 15:07:05.628000 50877
2015-08-17 15:07:05.701000 62989
2015-08-17 15:07:05.752000 33790
2015-08-17 15:07:05.802000 100314
2015-08-17 15:07:05.862000 10372
Run Code Online (Sandbox Code Playgroud)
....
随后,我按照以下方式按小时对这些事件进行了分组:
counts = df.groupby( [df.index.year, df.index.month, df.index.day, df.index.hour] ).count()
Run Code Online (Sandbox Code Playgroud)
即最终得到一个多级索引,有 4 个级别。
但是现在我正在努力创建一个很好的图表。诚然,我的熊猫可视化技巧非常狡猾。我没有比以下更进一步:
counts.plot()
Run Code Online (Sandbox Code Playgroud)
但这使得 x 轴完全不可读(元组序列)。我希望 x 轴是一个适当的时间序列,可以很好地与绘图的分辨率等缩放。我正在 IPython 中执行此操作,以防万一。(我想这个问题可能归结为如何将 4 个索引级别再次折叠为一个时间戳)。
我很乐意阅读一些参考资料,因此请随时指出任何有用的链接以供阅读。我环顾四周,但无法立即找到有关特定主题的任何信息。
(此外,请随时提出任何替代方法来实现我想要做的事情 - 不确定多级索引是否最合适)。
谢谢!
小智 0
这种情况下的问题是存在多个级别的索引。您可以重新连接不同的级别。因此进行重新索引。可以在这里找到类似的问题。
有关使用多级索引重新索引的信息,我找到了这个。在这种特殊情况下,您必须将级别重新组合为日期时间对象
import datetime
df.index = [datetime.datetime(year, month, day, hour) for year, month, day, hour in df.index]
Run Code Online (Sandbox Code Playgroud)
这给出了类似的东西:
2019-10-14 19:00:00 1
2020-10-14 19:00:00 2
2020-10-14 20:00:00 2
2020-10-15 00:00:00 1
2020-10-15 05:00:00 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
944 次 |
| 最近记录: |