For the Googlers who come upon this old question:
Regarding @kekert's comment on @Garrett's answer to use the new
df.groupby('id')['x'].rolling(2).mean()
rather than the now-deprecated
df.groupby('id')['x'].apply(pd.rolling_mean, 2, min_periods=1)
curiously, it seems that the new .rolling().mean() approach returns a multi-indexed series, indexed by the group_by column first and then the index. Whereas, the old approach would simply return a series indexed singularly by the original df index, which perhaps makes less sense, but made it very convenient for adding that series as a new column into the original dataframe.
So I think I've figured out a solution that uses the new rolling() method and still works the same:
df.groupby('id')['x'].rolling(2).mean().reset_index(0,drop=True)
which should give you the series
0 0.0
1 0.5
2 1.5
3 3.0
4 3.5
5 4.5
which you can add as a column:
df['x'] = df.groupby('id')['x'].rolling(2).mean().reset_index(0,drop=True)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…