我有一个数据帧,我想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。那个讨厌的人与这个问题无关。