代码之家  ›  专栏  ›  技术社区  ›  The Great

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

  •  0
  • The Great  · 技术社区  · 2 年前

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

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

    我当时正在从事功能工程活动,发现我们根据每个供应商的绩效和绩效为其生成了一个季度分数 这个分数在0到35之间 .

    也就是说,一个供应商每年(第一季度、第二季度、第三季度和第四季度)会根据其表现获得4次该分数。0表示性能不佳,35表示性能最佳。

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

    然而,当我这么做的时候,我意识到 mov_avg_score

    也就是说,mov_avg_score列包含37.23、52等值?

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

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

    df['mov_avg_score'] = df.groupby(['supplier','region'])['score'].expanding().mean().shift().values
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   wwnde    2 年前
     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
    

    在您的评论之后,使用最大组的大小作为窗口

    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']