У меня есть датафрейм со столбцом даты и времени. Я хочу сгруппировать только по компоненту времени и агрегировать, например, взяв среднее.
Я знаю, что могу использовать pd.Grouper для группировки по дате и времени, но это не работает только по времени.
Скажем, у нас есть следующий фрейм данных:
import numpy as np
import pandas as pd
drange = pd.date_range('2019-08-01 00:00', '2019-08-12 12:00', freq='1T')
time = drange.time
c0 = np.random.rand(len(drange))
c1 = np.random.rand(len(drange))
df = pd.DataFrame(dict(drange=drange, time=time, c0=c0, c1=c1))
print(df.head())
drange time c0 c1
0 2019-08-01 00:00:00 00:00:00 0.031946 0.159739
1 2019-08-01 00:01:00 00:01:00 0.809171 0.681942
2 2019-08-01 00:02:00 00:02:00 0.036720 0.133443
3 2019-08-01 00:03:00 00:03:00 0.650522 0.409797
4 2019-08-01 00:04:00 00:04:00 0.239262 0.814565
В этом случае следующее выдает ошибку типа:
grouper = pd.Grouper(key='time', freq='5T')
grouped = df.groupby(grouper).mean()
Я мог бы установить key=drange
для группировки по дате и времени, а затем:
- Сброс индекса
- Преобразование нового столбца в число с плавающей точкой
- Корзина с pd.cut
- Вернёмся ко времени
- Наконец, группируем и затем агрегируем
... Но мне интересно, есть ли более чистый способ достижения тех же результатов.