Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calculate an incremental mean using python pandas

Tags:

python

pandas

I'd like to generate a series that's the incremental mean of a timeseries. Meaning that, starting from the first date (index 0), the mean stored in row x is the average of values [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'm hoping there's a way to do this without looping to take advantage of pandas.

like image 713
Jmc Avatar asked Jan 15 '14 15:01

Jmc


2 Answers

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

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

or

s.expanding().mean() 
like image 51
jpobst Avatar answered Oct 02 '22 10:10

jpobst


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 
like image 32
Andy Hayden Avatar answered Oct 02 '22 10:10

Andy Hayden