【发布时间】:2021-01-18 17:58:28
【问题描述】:
我想动态创建一个指数衰减的移动平均线,为最近测量值赋予更多权重。例如,如果我有 5 个请求,而这 5 个请求是过去 4 周的结果,我想使用这 4 周(第 1 行)动态创建指数平均值。尽管如此,如果这 5 个请求是 4 周的结果,但其中一些周不止一次出现,那么我想以某种方式修改指数平均值,以免将重复的周视为单独的周并分配错误的权重。我的测量值以周为单位。示例数据框:
id requests day_of_week hour weeks
1 5 3 21 [1,2,3,4]
2 5 3. 22 [2,2,3,4]
Expected output:
id requests day_of_week hour weeks output
1 0 3 21 [1,2,3,4] see_function
2 5 3. 22 [2,2,3,4] see_function
I am defining the weighted mean function as follows:
# lambda function to compute the weighted mean:
r = 0.5
a = 1.0
wm = lambda x: np.average(x, weights=[a * r ** i for i in range(len(x))].reverse())
df['output'] = df['weeks'].apply(wm, axis=1)
尽管如此,我的做法是错误的,因为它每周(无论是否重复)都完全相同。我试图找到一个聪明的解决方案,可以区分周是否重复,从而不分配虚构的权重。
我发布的加权平均值假设一个恒定的半衰期,它仅取决于测量的长度,并没有考虑我想要的。假设周数是 {2: 2, 3:1, 4:1},那么我会以某种方式利用出现的频率来调整我的加权平均值,以便比现在更关注最近的事件
【问题讨论】:
标签: pandas dataframe average weighted