Calculate incremental average with python pandas

I would like to create a series that is incremental average time. This means that starting from the first date (index 0), the average value stored in row x is the average value [0: x]

data index value mean formula 0 4 1 5 2 6 3 7 5.5 average(0-3) 4 4 5.2 average(0-4) 5 5 5.166666667 average(0-5) 6 6 5.285714286 average(0-6) 7 7 5.5 average(0-7) 

I hope to find a way to do this without a loop to take advantage of pandas.

+8
python pandas
source share
3 answers

As @TomAugspurger points out, you can use expanding_mean :

 In [11]: s = pd.Series([4, 5, 6, 7, 4, 5, 6, 7]) In [12]: pd.expanding_mean(s, 4) Out[12]: 0 NaN 1 NaN 2 NaN 3 5.500000 4 5.200000 5 5.166667 6 5.285714 7 5.500000 dtype: float64 
+8
source share

Here's an update for newer versions of Pandas (starting from 0.18.0)

 df['value'].expanding().mean() 

or

 s.expanding().mean() 
+11
source share

Another approach is to use cumsum () and divide by the total number of elements, for example:

 In [1]: s = pd.Series([4, 5, 6, 7, 4, 5, 6, 7]) s.cumsum() / pd.Series(np.arange(1, len(s)+1), s.index) Out[1]: 0 4.000000 1 4.500000 2 5.000000 3 5.500000 4 5.200000 5 5.166667 6 5.285714 7 5.500000 dtype: float64 
+4
source share

All Articles