【问题标题】:Compute the rolling mean over the last n days in Dask在 Dask 中计算过去 n 天的滚动平均值
【发布时间】:2020-05-03 17:20:24
【问题描述】:

我正在尝试在大型数据集上计算过去 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 代码”分组,并在“entry_time_flat”(日期时间对象)的最后 n 天计算特征“持续时间”的平均值。

但是,为了保持代码高效,最好在 Dask 数据帧上重现此函数,而不将其转换为 Pandas DF。

如果我在 Dask DF 上运行上述代码,则会引发以下错误:

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

最终,我如何计算 Dask 数据帧过去 n 天内“持续时间”列的平均值?

【问题讨论】:

    标签: python pandas dask dask-dataframe


    【解决方案1】:

    最终,我如何计算 Dask 数据帧过去 n 天内“持续时间”列的平均值?

    滚动 API 应该为您提供此功能

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

    【讨论】:

    • ddf.groupby('g')['v'].apply(lambda x: x.rolling('3D').mean(), meta=('avg3d', 'f8')) 这行得通,但我无法将其恢复到原始框架中,有什么指示吗?查看完整示例stackoverflow.com/questions/70867704/…
    猜你喜欢
    • 1970-01-01
    • 2016-08-26
    • 2020-09-05
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2012-06-03
    相关资源
    最近更新 更多