Как сгруппировать временные ряды по часам дня? - PullRequest
0 голосов
/ 01 июля 2019

У меня есть временной ряд, и я хочу сгруппировать строки по часам дня (независимо от даты) и визуализировать их как коробочные диаграммы. Поэтому я хотел бы получить 24 коробочных графика, начиная с часа 1, затем часа 2, затем часа 3 и т. Д.

То, как я вижу эту работу, разбивает набор данных на 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 Ответ

2 голосов
/ 01 июля 2019

Есть 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...