Вычислить скользящее среднее за последние n дней в Dask

Я пытаюсь вычислить скользящее среднее за последние n дней (с n = 30) для большого набора данных. В Pandas я бы использовал следующую команду:

 temp = chunk.groupby('id_code').apply(lambda x: x.set_index('entry_time_flat').resample('1D').first())
    dd = temp.groupby(level=0)['duration'
                                ].apply(lambda x: x.shift().rolling(min_periods = 1,window = n_days).mean()
                                        ).reset_index(name = "avg_delay_"+ str(n_days) + "_days")

    chunk = pd.merge(chunk, dd, on=['entry_time_flat', 'id_code'], how='left'
                     ).dropna(subset = ["avg_delay_"+ str(n_days) + "_days"])

По сути, функция группируется по «id-коду» и для последних n дней, превышающих «entry_time_flat» (объект datetime), вычисляет среднее значение функции «duration».

Однако для того, чтобы код оставался эффективным, было бы здорово воспроизвести эту функцию на фрейме данных Dask, не преобразовывая его в Pandas DF.

Если я запускаю вышеупомянутый код на Dask DF, возникает следующая ошибка:

TypeError: __init__() got an unexpected keyword argument 'level'

В конце концов, как я могу вычислить среднее значение столбца «продолжительность» за последние n дней на фрейме данных Dask?


person Alessandro Ceccarelli    schedule 03.05.2020    source источник


Ответы (1)


В конце концов, как я могу вычислить среднее значение столбца «продолжительность» за последние n дней на фрейме данных Dask?

Скользящий API должен предоставить вам эту функциональность

https://docs.dask.org/en/latest/dataframe-api.html#rolling

person MRocklin    schedule 08.05.2020