【问题标题】:Issue with groupby and rolling windowgroupby 和滚动窗口的问题
【发布时间】:2020-03-06 23:07:29
【问题描述】:

相关:pandas dataframe rolling window with groupby

我有一些DataFrame

df = pd.DataFrame({'type':[0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1], 
              'rank':[0,1,2,3,4,5,6,7,8,9,10,0,1,2,3,4], 
              'score':[5,8,10,12,4,9,13,23,42,4,9,10,8,12,48,9]}) 

我想添加一个新列,其中包括每 4 个ranks 的每个typescores 的滚动平均值。

这样的东西非常接近我想要的:

f = lambda x: x.rolling(4, min_periods=4).mean()
df['rolling'] = df.groupby('type')['score'].apply(f)

但我想从每个type 中的第一个rank 开始平均。最后 3 个 ranks 应该返回 NaN,例如:

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    如果需要按组转移,请将Series.shift 添加到mean

    f = lambda x: x.rolling(4, min_periods=4).mean().shift(-3)
    df['rolling'] = df.groupby('type')['score'].apply(f)
    

    如果在组外添加所有值的shift,应该是一样的,我希望:

    df['rolling'] = (df.groupby('type')
                       .score.rolling(4, min_periods=4)
                       .mean()
                       .shift(-3)
                       .reset_index(level=0, drop=True))
    

    print (df)
        type  rank  score  rolling
    0      0     0      5     8.75
    1      0     1      8     8.50
    2      0     2     10     8.75
    3      0     3     12     9.50
    4      0     4      4    12.25
    5      0     5      9    21.75
    6      0     6     13    20.50
    7      0     7     23    19.50
    8      0     8     42      NaN
    9      0     9      4      NaN
    10     0    10      9      NaN
    11     1     0     10    19.50
    12     1     1      8    19.25
    13     1     2     12      NaN
    14     1     3     48      NaN
    15     1     4      9      NaN
    

    【讨论】:

      猜你喜欢
      • 2019-02-25
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      相关资源
      最近更新 更多