python中按id/组按定义的间隔移动平均值

python中按id/组按定义的间隔移动平均值,python,csv,pandas,numpy,moving-average,Python,Csv,Pandas,Numpy,Moving Average,给定的是具有以下列和值的csv数据集(示例)。 我想在我的csv数据中添加一个新列,根据每个id移动平均值为S1。S1是我的测量值。时间范围t应该是3。这就是我的数据集当前的外观 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

给定的是具有以下列和值的csv数据集(示例)。 我想在我的csv数据中添加一个新列,根据每个id移动平均值为S1。S1是我的测量值。时间范围t应该是3。这就是我的数据集当前的外观

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

使用
groupby
rolling
mean

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

您能提供您尝试过的代码吗?这里的变量是什么意思?沿着S1改变?如果是,根据什么标准?对不起,可能是用错词了。我的意思是,不管时间框架或时间窗口是3或5或其他什么。我只想有一个额外的列,包含S1的移动平均值。对于每个ID,这是一个很好的方法。谢谢但我不知道如何将其作为附加列添加到我的数据集中idx1=df.groupby('id')['RUL'].nsmallest(30).重置索引(drop=True,level=0).索引#df['label1']=np.where(df.index.isin(idx1),1,0)这是一个很好的方法。谢谢但我不确定如何将其作为附加列添加到我的数据集中。我的意思是这是另一种情况,但我想添加这样一个冒号:idx1=df.groupby('id')['RUL'].nsmallest(30).reset_index(drop=True,level=0).index df['label1']=np.where(df.index.isin(idx1),1,0).任何问题中最有效的部分都是提供您正在使用的数据的样本以及您期望作为输出的样本。我不知道你到底想要什么或需要什么。我提供这个答案是因为我认为它可能会有所帮助。如果你能回到过去,更好地阐明你的目标,我可以更有效地帮助你。也就是说,花点时间把你在问题中提供的样品的结果拼凑起来。请原谅我的不准确。我已经编辑了我的问题。谢谢你的帮助。问题仍然悬而未决。你的回答完全正确。但是,如何将具有此函数的列添加到如上所示的“id”和“S1”中?