用于确定滚动功能中的窗口的功能

时间:2018-05-07 20:53:31

标签: python pandas

我有一个数据框,我希望在3对数字列上应用滚动均值,我只想要4个唯​​一值进入均值。 让我们说我的数据框看起来像:

     Group  Column to roll    
       1       9
       2       5
       2       5
       2       4
       2       4
       2       4
       2       3
       2       3
       2       3
       2       6
       2       6
       2       6
       2       8

由于我希望4个唯一值进入均值,但所有值都具有相同的权重且在同一组中,我的预期输出(假设我需要4个唯一值)将是:

         Group    Output   
            1       nan
            2       nan
            2       nan
            2       nan
            2       nan
            2       nan
            2       nan
            2       nan
            2       nan
            2     (6+3+4+5)/4
            2     (6+3+4+5)/4
            2     (6+3+4+5)/4
            2     (8+6+3+4)/4

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

df['Column to roll'].drop_duplicates().rolling(4).mean().reindex(df.index).ffill()

输出:

0      NaN
1      NaN
2      NaN
3      NaN
4      NaN
5      NaN
6      NaN
7      NaN
8     4.50
9     4.50
10    4.50
11    5.25
Name: Column to roll, dtype: float64

编辑问题已更改

df_out = df.groupby('Group')['Column to roll']\
           .apply(lambda x: x.drop_duplicates().rolling(4).mean()).rename('Output')

df.set_index('Group',append=True).swaplevel(0,1)\
  .join(df_out, how='left').ffill().reset_index(level=1, drop=True)

输出:

       Column to roll  Output
Group                        
1                   9     NaN
2                   5     NaN
2                   5     NaN
2                   4     NaN
2                   4     NaN
2                   4     NaN
2                   3     NaN
2                   3     NaN
2                   3     NaN
2                   6    4.50
2                   6    4.50
2                   6    4.50
2                   8    5.25