Reputation: 10033
The following line:
df['moment'] = df.groupby('team').P.apply(lambda x : x.rolling(5).sum().fillna(0))
Generates the following dataframe, with a new column 'moment', which has the rolling sum of the past 5 'P' points:
round team P GP GC moment
0 1 Flamengo 0 0.0 1.0 0.0
1 2 Flamengo 0 0.0 3.0 0.0
2 3 Flamengo 3 1.0 0.0 0.0
3 4 Flamengo 1 1.0 1.0 0.0
4 5 Flamengo 1 1.0 1.0 5.0
5 6 Flamengo 3 1.0 0.0 8.0
6 7 Flamengo 3 5.0 3.0 11.0
7 8 Flamengo 3 2.0 1.0 11.0
8 9 Flamengo 3 2.0 1.0 13.0
9 10 Flamengo 0 0.0 2.0 12.0
10 11 Flamengo 3 2.0 1.0 12.0
11 12 Flamengo 1 1.0 1.0 10.0
12 13 Flamengo 3 3.0 1.0 10.0
13 14 Flamengo 3 3.0 0.0 10.0
14 15 Flamengo 3 2.0 1.0 13.0
15 16 Flamengo 1 1.0 1.0 11.0
16 17 Flamengo 3 5.0 1.0 13.0
17 18 Flamengo 1 2.0 2.0 11.0
18 19 Flamengo 0 1.0 4.0 8.0
19 20 Flamengo 0 0.0 4.0 5.0
But I need to apply the sum of the last 4, 3, 2 and 1 'P' as well, up to index 4
, when we haven't reached N=5 yet. At the moment it is 0, which is wrong...
how do I tweak the code above in order to achieve this?
Desired result:
round team P GP GC moment
0 1 Flamengo 0 0.0 1.0 0.0
1 2 Flamengo 0 0.0 3.0 0.0
2 3 Flamengo 3 1.0 0.0 3.0
3 4 Flamengo 1 1.0 1.0 4.0
4 5 Flamengo 1 1.0 1.0 5.0
5 6 Flamengo 3 1.0 0.0 8.0
6 7 Flamengo 3 5.0 3.0 11.0
7 8 Flamengo 3 2.0 1.0 11.0
8 9 Flamengo 3 2.0 1.0 13.0
9 10 Flamengo 0 0.0 2.0 12.0
10 11 Flamengo 3 2.0 1.0 12.0
11 12 Flamengo 1 1.0 1.0 10.0
12 13 Flamengo 3 3.0 1.0 10.0
13 14 Flamengo 3 3.0 0.0 10.0
14 15 Flamengo 3 2.0 1.0 13.0
15 16 Flamengo 1 1.0 1.0 11.0
16 17 Flamengo 3 5.0 1.0 13.0
17 18 Flamengo 1 2.0 2.0 11.0
18 19 Flamengo 0 1.0 4.0 8.0
19 20 Flamengo 0 0.0 4.0 5.0
Upvotes: 1
Views: 464