In [16]: df.groupby('id')['x'].apply(pd.rolling_mean, 2, min_periods=1) Out[16]: 0 0.0 1 0.5 2 1.5 3 3.0 4 3.5 5 4.5 In [17]: df.groupby('id')['x'].cumsum() Out[17]: 0 0 1 1 2 3 3 3 4 7 5 12