如何按一天中的小时分组时间序列?

时间:2019-07-01 19:54:18

标签: python pandas dataframe time-series

我有一个时间序列,我想按一天中的小时(不考虑日期)对行进行分组,并将其可视化为箱线图。因此,我希望从第一个小时开始的24个箱型图,然后从第二个小时开始,再到第三个小时,依此类推。

我看到这种工作方式是将数据集分成24个系列(一天中的每个小时1个),为每个系列创建一个箱形图,然后在相同的轴上进行绘制。

我能想到的唯一方法是手动选择每个小时之间的所有值,有没有更快的方法?

一些示例数据:

Date    Actual Consumption
2018-01-01 00:00:00 47.05
2018-01-01 00:15:00 46
2018-01-01 00:30:00 44
2018-01-01 00:45:00 45
2018-01-01 01:00:00 43.5
2018-01-01 01:15:00 43.5
2018-01-01 01:30:00 43
2018-01-01 01:45:00 42.5
2018-01-01 02:00:00 43
2018-01-01 02:15:00 42.5
2018-01-01 02:30:00 41
2018-01-01 02:45:00 42.5
2018-01-01 03:00:00 42.04
2018-01-01 03:15:00 41.96
2018-01-01 03:30:00 44
2018-01-01 03:45:00 44
2018-01-01 04:00:00 43.54
2018-01-01 04:15:00 43.46
2018-01-01 04:30:00 43.5
2018-01-01 04:45:00 43
2018-01-01 05:00:00 42.04

这是我到目前为止尝试过的:

zero = df.between_time('00:00', '00:59')
one = df.between_time('01:00', '01:59')
two = df.between_time('02:00', '02:59')

,然后我将在相同的轴上绘制每个箱形图。但是,一天24小时都执行此操作非常繁琐。

这是我想要的输出: https://www.researchgate.net/figure/Boxplot-of-the-NOx-data-by-hour-of-the-day_fig1_24054015

1 个答案:

答案 0 :(得分:2)

有2个步骤可实现此目的:

  1. 将实际时间转换为日期时间:

    df.Actual = pd.to_datetime(df.Actual)
    
  2. 按小时分组:

    df.groupby([df.Date, df.Actual.dt.hour+1]).Consumption.sum().reset_index()
    

我假设您想对消耗量求和(除非您希望拥有平均值或进行任何更改)。注意:小时+1,因此它将从1开始而不是0(如果您希望0为午夜,则将其删除)。

所需结果:

    Date    Actual  Consumption
0   2018-01-01  1   182.05
1   2018-01-01  2   172.50
2   2018-01-01  3   169.00
3   2018-01-01  4   172.00
4   2018-01-01  5   173.50
5   2018-01-01  6   42.04