Pandas Сводная таблица Dataframe со столбцами, отсортированными по диапазону даты и времени - PullRequest
1 голос
/ 11 июля 2020

Мне нужно сделать сводную таблицу, в которой столбцы представляют собой диапазоны дат и времени. Возможно, я плохо сформулировал свой вопрос, поэтому не смог найти нужный мне ответ.

Например, скажем, у меня есть фрейм данных:

start_time             end_time               duration_hours    error
2020-05-08 20:04:00    2020-05-08 22:04:00    2                 1
2020-05-09 07:22:00    2020-05-09 08:52:00    1.5               1
2020-05-09 13:20:00    2020-05-09 15:20:00    3                 1
2020-05-08 11:45:00    2020-05-08 15:45:00    4                 2
2020-05-08 18:30:00    2020-05-08 19:00:00    0.5               3
2020-05-09 18:15:00    2020-05-09 20:45:00    2.5               3

Я хочу, чтобы результат был:

         timeframe
error    2020-05-08 06:00 ~ 2020-05-08 18:00    2020-05-08 18:00 ~ 2020-05-09 06:00    2020-05-09 06:00 ~ 2020-05-09 18:00    2020-05-09 18:00 ~ 2020-05-10 06:00
1        0                                      2                                      4.5                                    0
2        4                                      0                                      0                                      0
3        0                                      0.5                                    0                                      2.5

По сути, я хочу, чтобы ошибка была указателем, а столбцы были организованы с чередованием периодов с 6 до 18 и с 18 до 6 утра каждый день. Данные в таблице должны быть суммой продолжительности в течение этого периода. Можно предположить, что start_time и end_time будут в одном и том же периоде.

Я пытался выяснить, как организовать столбцы с чередованием периодов, но не смог. Таблица должна быть масштабируемой, поэтому я тоже не могу ее жестко закодировать. Любая помощь приветствуется!

1 Ответ

0 голосов
/ 11 июля 2020

Возможно, вам не обязательно добавлять диапазон, поскольку он кажется понятным на основе значения следующего столбца. Я бы группировал с error и pd.Grouper. Затем создайте оттуда сводную таблицу.

df1 = df.groupby(['error', pd.Grouper(key='start_time', freq='12H', base=6)])['duration_hours'].sum().reset_index().pivot_table(index='error', columns='start_time', values='duration_hours').fillna(0)

df1

start_time  2020-05-08 06:00:00  2020-05-08 18:00:00    2020-05-09 06:00:00  2020-05-09 18:00:00
error               
1           0.0                  2.0                    4.5                  0.0
2           4.0                  0.0                    0.0                  0.0
3           0.0                  0.5                    0.0                  2.5
...