移动平均值超出原始列值的范围
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']
我有一个如下所示的数据框
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']