移动平均值超出原始列值的范围

moving average value exceeds the range of original column values

我有一个如下所示的数据框

score,region,supplier
27,AP,ABC
35,AP,ABC
29,ANZ,DEF
35,ANZ,DEF
30,KOREA,GHI
34,KOREA,GHI

我从事特征工程活动,发现我们根据每个供应商的表现为每个供应商生成一个季度分数,这个分数范围从 0 到 35

意思是,供应商根据其表现每年获得 4 次此分数(Q1、Q2、Q3 和 Q4)。 0 表示性能较差,35 表示性能最好。

我所做的是根据供应商到当前时间点的历史记录(过去数据)计算这些分数的移动平均值。

但是,当我这样做时,我意识到 mov_avg_score 超出了 35 的范围。

意思是,mov_avg_score 列包含 37.23、52 等值?

这可能吗?派生分数(使用移动平均值(平均值)计算)如何超过其原始分数的范围?移动平均得分不应该也在同一范围内吗?

以防万一,如果您有兴趣查看我的代码,请在下面找到

df['mov_avg_score'] = df.groupby(['supplier','region'])['score'].expanding().mean().shift().values
 df['rolling_mean']=df.groupby(['supplier','region'],as_index=False,)['score'].rolling(2, min_periods=1).mean()['score']
    

   score region supplier  rolling_mean
0     27     AP      ABC          27.0
1     35     AP      ABC          31.0
2     29    ANZ      DEF          29.0
3     35    ANZ      DEF          32.0
4     30  KOREA      GHI          30.0
5     34  KOREA      GHI          32.0

根据您的评论,使用最大组的大小作为 window

s=df.groupby(['supplier','region'])['score'].size().max()#compute window size

#滚动平均值

df['rolling_mean']=df.groupby(['supplier','region'],as_index=False,)['score'].rolling(s,min_periods=1).mean()['score']