2014-01-15 105 views
8

我想生成一系列時間序列的增量平均值。這意味着,從第一日起(索引0),存儲在X行均值是值的平均值[0:X]使用python熊貓計算增量平均數

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) 

我希望有一種方法可以做到這一點沒有循環取熊貓的優勢。

+2

你正在尋找一個['expanding_mean'(http://pandas.pydata.org/pandas-docs/dev/generated/pandas.stats.moments.expanding_mean.html) 像[這個問題](http://stackoverflow.com/questions/21092629/applying-cumulative-mean-function-to-a-grouped-object/21093297#21093297)但沒有groupby。 – TomAugspurger

+0

非常感謝。 – Jmc

回答

8

由於@TomAugspurger指出的那樣,你可以使用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 
4

另一種方法是通過項目的累計數量使用cumsum(),和除法,例如:

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 
11

這是熊貓新版本的更新(以0.18.0開頭)

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

s.expanding().mean()