0

我計算簡單移動平均:計算加權移動平均使用大熊貓軋製方法

def sma(data_frame, length=15): 
    # TODO: Be sure about default values of length. 
    smas = data_frame.Close.rolling(window=length, center=False).mean() 
    return smas 

使用滾動功能可以計算加權移動平均?由於我讀in the documentation,我認爲我必須通過win_type參數。但我不確定我必須選擇哪一個。

這是加權移動平均的definition

由於提前,

+2

查看支持加權的['np.average'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.average.html)。 –

+2

我會在[Github](https://github.com/pydata/pandas)上提出問題。這些文件的確有誤導性。 [它建議](https://github.com/pydata/pandas/blob/37f95cef85834207db0930e863341efb285e38a2/doc/source/computation.rst#id49)可以通過_custom__weights_,但它並不能解釋人們會如何去做,而且在存儲庫中沒有這樣做的例子。 – dangom

回答

3

呀,熊貓的那部分真的沒有很好的記錄。我想如果你沒有使用標準的窗口類型,你可能不得不使用rolling.apply()。我戳了一下,並得到這個工作:

>>> import numpy as np 
>>> import pandas as pd 
>>> d = pd.DataFrame({'a':range(10), 'b':np.random.random(size=10)}) 
>>> d.b = d.b.round(2) 
>>> d 
    a  b 
0 0 0.28 
1 1 0.70 
2 2 0.28 
3 3 0.99 
4 4 0.72 
5 5 0.43 
6 6 0.71 
7 7 0.75 
8 8 0.61 
9 9 0.14 
>>> wts = np.array([-1, 2]) 
>>> def f(w):       
     def g(x): 
      return (w*x).mean() 
     return g 
>>> d.rolling(window=2).apply(f(wts)) 
    a  b 
0 NaN NaN 
1 1.0 0.560 
2 1.5 -0.070 
3 2.0 0.850 
4 2.5 0.225 
5 3.0 0.070 
6 3.5 0.495 
7 4.0 0.395 
8 4.5 0.235 
9 5.0 -0.165 

我認爲這是正確的。關閉的原因是滾動應用程序的簽名是rolling.apply(func, *args, **kwargs),所以如果你只是直接將它們發送給函數,那麼權重就會被解開,除非你以1元組的形式發送它們,但這很奇怪。