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)1つは_custom_ _weights_を渡すことができるが、それはどのようにして行うのか説明していない。これが行われるリポジトリには例がありません。 – dangom

答えて

3

ええ、そのパンダの部分は、あまりよく説明されていません。標準のウィンドウタイプの1つを使用していない場合、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の署名がrolling.apply(func, *args, **kwargs)であるため、1タプル(wts,)として送信しない限り、関数を直接関数に送信するだけで重みがタプル展開されますが、それは変です。

関連する問題