Pandas 特定条件下数据帧中的加权平均

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

我想动态地创建一个指数衰减的移动平均线,为最近的测量提供更多的权重。例如,如果我有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},那么我会利用出现的频率来调整加权平均值,以便比现在更加关注最近的周数。如果您想消除周数列表中的重复项,那么您可以执行以下操作,并在数据框和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)))
输出:


谢谢你的回答,但这不是我想要的:)