Предположим, у меня есть pandas DataFrame df
с некоторыми минутными значениями на частотной основе:
dts values
0 2020-01-01 01:00:00 20.0
1 2020-01-01 01:01:00 30.0
2 2020-01-01 02:00:00 NaN
3 2020-01-01 06:00:00 30.0
4 2020-01-01 06:01:00 50.0
Я хочу агрегировать их на произвольную частоту до месяца ('5min', «15 минут», «час», «день», «неделя», «месяц»). Для наглядности предположим, что я хочу объединить приведенный выше фрейм данных до часового уровня. В этом случае - а также для других частот - я хочу сохранить весь час, за который данные доступны в кадре данных, ВКЛЮЧАЯ строку NaN
. Для этого я использую метод pd.Grouper следующим образом:
df = df.groupby(
pd.Grouper(key='dts', freq='H', label='left', closed='left')
).agg('mean').reset_index()
, который даст мне следующий результат:
dts values
0 2020-01-01 01:00:00 25.0
1 2020-01-01 02:00:00 NaN
2 2020-01-01 03:00:00 NaN
3 2020-01-01 04:00:00 NaN
4 2020-01-01 05:00:00 NaN
5 2020-01-01 06:00:00 40.0
Однако, мой желаемый результат будет:
dts values
0 2020-01-01 01:00:00 25.0
1 2020-01-01 02:00:00 NaN
5 2020-01-01 06:00:00 40.0
Это означает, что часы / минуты, отсутствующие в исходном кадре данных, не отображаются в результате, а NaN
-.
Есть ли эффективный способ сделать это используя pd.Grouper
или другим эффективным способом? Я искал, но не могу найти аргумента для метода pd.Grouper
, который допускает это.