id/group 的移动平均线,定义的区间为 python

Moving average by id/group with a defined interval in python

给出的是一个包含以下列和值的 csv 数据集(示例)。 我想在我的 csv 数据中添加一个新列,并根据每个 ID 使用 S1 的移动平均值。 S1 是我的测量值。时间范围 t 应该是 3.That 我的数据集当前的样子。

id  S1  
1   3
1   4
1   2
1   6
1   9
2   3
2   1
2   2
2   3
2   8
2   6
3   1
3   4
3   2
3   8
3   5

这就是我想做的事情:

id  S1   movA  
1   3    NaN
1   4    NaN
1   2    3.000
1   6    4.000
1   9    5.667
2   3    NaN
2   1    NaN
2   2    2.000
2   3    2.000
2   8    4.333
2   6    5.333
3   1    NaN
3   4    NaN
3   2    2.333
3   8    4.667
3   5    5.000

使用 groupbyrollingmean

g = df.groupby('id').S1
rolls = [2, 3, 4, 5]
pd.concat([g.rolling(i).mean() for i in rolls], axis=1, keys=rolls)