我有一个数据帧,我想groupby一些属性并计算dask中数值列的rolling平均值。我知道dask中没有groupby rolling的实现,但我读到一个so问题,这表明它是可能的。
Dask rolling function by group syntax
当我使用post中的相同语法时,会得到一个错误:
UnpicklingError: invalid load key, '�'.
我不明白为什么我会犯一个令人讨厌的错误。
df.groupby(by=path)[metric].apply(lambda df_g: df_g[metric].rolling(5).mean(), meta=(metric, 'f8')).compute()
其中path是属性列的列表,metric是数值列。
我还尝试了以下方法:

def moving_avg(partition):
    return partition.rolling(5).mean()

df.groupby(by=path)[metric].apply(moving_avg, meta='f8').compute()

我在pyspark中使用了rolling average函数,在这里我按groupby定义分区,然后在上面滚动一个窗口。
样本数据:
           CATEGORY_NAME               MKT   ...         Growth   Sales
Date                                         ...
2017-01-07            TP              SIMS   ...         0.0000   17280
2017-01-07            TP           TOPRITE   ...        -0.4566    1825
2017-01-07            TP       GIANT HYPER   ...         0.0874   18417
2017-01-07            TP       GIANT HYPER   ...        -0.1359   10914
2017-01-07            TP       GIANT HYPER   ...         0.2245    4422
2017-01-07            TP           TOPRITE   ...         0.1084    1444
2017-01-07            TP       GIANT HYPER   ...         0.0542   18412
2017-01-07            TP            FENCER   ...         0.2766   25184
2017-01-07            TP       GIANT HYPER   ...        -0.0572   19466
2017-01-07            TP           TOPRITE   ...         0.1795    1503
2017-01-07            TP       GIANT HYPER   ...         0.0770   13615

假设我想按["CATEGORY_NAME", "MKT"]分组,并取Sales的滚动平均值。

最佳答案

答案见Dask rolling function by group syntax。那个讨厌的人与这个问题无关。

08-25 06:04