Вы можете рассчитать сумму последних 5 следующим образом:
df["rolling As"] = df[df['id'] == 'a'].rolling(window=5).sum()["values"]
(включая текущую строку как одну из 5. не уверен, что это именно то, что вам нужно)
id values rolling As
0 a 5 NaN
1 a 10 NaN
2 a 10 NaN
3 b 2 NaN
4 c 2 NaN
5 d 5 NaN
6 a 10 NaN
7 a 20 55.0
8 a 10 60.0
9 a 10 60.0
10 a 15 65.0
11 a 20 75.0
Если вы не хотите, чтобы оно было включено. вы можете сдвинуть
df["rolling"] = df[df['id'] == 'a'].rolling(window=5).sum()["values"].shift()
дать:
id values rolling
0 a 5 NaN
1 a 10 NaN
2 a 10 NaN
3 b 2 NaN
4 c 2 NaN
5 d 5 NaN
6 a 10 NaN
7 a 20 NaN
8 a 10 55.0
9 a 10 60.0
10 a 15 60.0
11 a 20 65.0