Pandas 特定条件下数据帧中的加权平均
我想动态地创建一个指数衰减的移动平均线,为最近的测量提供更多的权重。例如,如果我有5个请求,而这5个请求是过去4周的结果,我希望使用这4周动态创建指数平均值(第1行)。然而,如果这5个请求是4周的结果,但其中一些周出现了不止一次,那么我想以某种方式修改指数平均值,以便不将重复的周视为单独的周,并分配错误的权重。我的测量单位是星期。数据帧示例:Pandas 特定条件下数据帧中的加权平均,pandas,dataframe,average,weighted,Pandas,Dataframe,Average,Weighted,我想动态地创建一个指数衰减的移动平均线,为最近的测量提供更多的权重。例如,如果我有5个请求,而这5个请求是过去4周的结果,我希望使用这4周动态创建指数平均值(第1行)。然而,如果这5个请求是4周的结果,但其中一些周出现了不止一次,那么我想以某种方式修改指数平均值,以便不将重复的周视为单独的周,并分配错误的权重。我的测量单位是星期。数据帧示例: id requests day_of_week hour weeks 1 5 3 21 [1,2,3,4] 2
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},那么我会利用出现的频率来调整加权平均值,以便比现在更加关注最近的周数。如果您想消除周数列表中的重复项,那么您可以执行以下操作,并在数据框和cal中添加新列。你在上面加了平均重量
df = pd.DataFrame({'id':[1,4],'weeks':[[1,2,3,4],[2,2,3,4]]})
df['DistinctWeeks']=df['weeks'].apply(lambda x : list(set(x)))
输出:
谢谢你的回答,但这不是我想要的:)