I have a df like this:
time data
0 0 [8, 8, 1]
1 1 [3, 3, 4]
2 2 [4, 7, 0]
3 3 [1, 4, 4]
4 4 [0, 3, 5]
5 5 [1, 1, 6]
6 6 [2, 0, 0]
7 7 [0, 9, 3]
8 8 [2, 9, 0]
9 9 [2, 8, 0]
How do I apply pd.rolling
to the data
column?
Basically, I want to take a rolling mean every 3 rows. The means should be element wise. For example:
time data rolling
0 0 [8, 8, 1] NaN
1 1 [3, 3, 4] NaN
2 2 [4, 7, 0] [5, 6, 1.6]
3 3 [1, 4, 4] [2.6, 4.6, 2.6]
4 4 [0, 3, 5] ... and so on ...
5 5 [1, 1, 6]
6 6 [2, 0, 0]
7 7 [0, 9, 3]
8 8 [2, 9, 0]
9 9 [2, 8, 0]
CodePudding user response:
Try:
df["rolling"] = pd.DataFrame(df["data"].tolist()).rolling(3).mean().to_numpy().tolist()
>>> df
time data rolling
0 0 [8, 8, 1] [nan, nan, nan]
1 1 [3, 3, 4] [nan, nan, nan]
2 2 [4, 7, 0] [5.0, 6.0, 1.6666666666666667]
3 3 [1, 4, 4] [2.6666666666666665, 4.666666666666667, 2.6666...
4 4 [0, 3, 5] [1.6666666666666667, 4.666666666666667, 3.0]
5 5 [1, 1, 6] [0.6666666666666666, 2.6666666666666665, 5.0]
6 6 [2, 0, 0] [1.0, 1.3333333333333333, 3.6666666666666665]
7 7 [0, 9, 3] [1.0, 3.3333333333333335, 3.0]
8 8 [2, 9, 0] [1.3333333333333333, 6.0, 1.0]
9 9 [2, 8, 0] [1.3333333333333333, 8.666666666666666, 1.0]