Home > Mobile >  how to use pd.rolling on a column of arrays
how to use pd.rolling on a column of arrays

Time:11-18

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]
  • Related