Временная шкала в пандах

Как я могу создать коробку для временного ряда pandas, где у меня есть ящик для каждого дня?

Примерный набор данных почасовых данных, где один ящик должен состоять из 24 значений:

import pandas as pd n = 480 ts = pd.Series(randn(n), index=pd.date_range(start="2014-02-01", periods=n, freq="H")) ts.plot() 

Я знаю, что я мог бы добавить дополнительную колонку в течение дня, но я хотел бы иметь правильную функциональность x-axis и x-limit (например, в ts.plot() ), поэтому возможность работать с индексом datetime будет будь велика.

Аналогичный вопрос для R / ggplot2 здесь , если он помогает уточнить, что я хочу.

Если это вариант для вас, я бы рекомендовал использовать Seaborn , который является оберткой для Matplotlib. Вы могли бы сделать это сами, перейдя по группам из ваших временных рядов, но это намного больше.

 import pandas as pd import seaborn import matplotlib.pyplot as plt n = 480 ts = pd.Series(np.random.randn(n), index=pd.date_range(start="2014-02-01", periods=n, freq="H")) fig, ax = plt.subplots(figsize=(12,5)) seaborn.boxplot(ts, ts.index.dayofyear, ax=ax) 

Который дает: введите описание изображения здесь

Обратите внимание, что я прохожу в течение day of year качестве группы на морское побережье, если ваши данные охватывают несколько лет, это не сработает. Тогда вы могли бы подумать над чем-то вроде:

 ts.index.to_series().apply(lambda x: x.strftime('%Y%m%d')) 

Изменить, в течение 3-х часов вы можете использовать это как группу, но он работает только в том случае, если нет никаких минут или меньше. :

 [(dt - datetime.timedelta(hours=int(dt.hour % 3))).strftime('%Y%m%d%H') for dt in ts.index] 

(Не достаточно, чтобы прокомментировать принятое решение, поэтому вместо этого добавьте ответ).

В принятом коде есть две небольшие ошибки: (1) нужно добавить numpy import и (2) nded для замены параметров x и y в инструкции boxplot . Ниже показан график.

 import numpy as np import pandas as pd import seaborn import matplotlib.pyplot as plt n = 480 ts = pd.Series(np.random.randn(n), index=pd.date_range(start="2014-02-01", periods=n, freq="H")) fig, ax = plt.subplots(figsize=(12,5)) seaborn.boxplot(ts.index.dayofyear, ts, ax=ax)