pd.Grouper агрегирует по частоте, но не показывает NaN для отсутствующих временных меток в исходном кадре данных - PullRequest
0 голосов
/ 02 апреля 2020

Предположим, у меня есть 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, который допускает это.

...