使用pandas

时间:2015-08-21 09:46:36

标签: python pandas

我有一个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

...

我随后按照以下方式按小时对这些事件进行分组:

counts = df.groupby( [df.index.year, df.index.month, df.index.day, df.index.hour] ).count()

即。最终得到一个多级索引,有4个级别。

但现在我正在努力创建一个漂亮的图表。不可否认,我的熊猫可视化技巧非常狡猾。我没有比这更进一步:

counts.plot()

但是这使得x轴完全不可读(一系列元组)。我希望x轴是一个适当的时间序列,可以很好地与绘图的分辨率等进行缩放。我在IPython中这样做,以防万一。 (我想这个问题可能归结为如何将4个索引级别再次折叠成一个时间戳)。

我很乐意通过某种参考,所以请随时指出任何有用的链接来阅读。我环顾四周,但无法立即找到关于特定主题的任何内容。

(另外,请随意提出任何替代方法来实现我想要做的事情 - 不确定多级索引是否最合适。)

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是resample。它设计用于按时间范围处理重组。试试:

df.resample('1H').count().plot()

答案 1 :(得分:0)

在这种情况下,问题是存在多个索引级别。您可以重新确认不同的级别。因此,要进行重新索引。可以找到类似的问题here

对于使用多级索引进行重新索引的信息,我发现了this。在这种特殊情况下,您必须将级别重新组合为日期时间对象

import datetime
df.index = [datetime.datetime(year, month, day, hour) for year, month, day, hour in df.index]

这提供了类似的内容:

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
相关问题