2016-10-14 3 views
3

私は自分のコードで、0.17を使用している間、pd.rolling_window(s、window = np.array(l)、....)を使用していました。 新しいseries.rolling(window、win_type)は、ウィンドウ上のints以外のものをサポートしなくなりました。また、win_typeは固定されたシェイプのセットに限定されています。パンダのrolling_window 19、カスタムシェイプを使用

古いカスタムのrolling_window平均を0.19に移行するにはどうすればよいですか?

おかげ

答えて

0

Rollingは、カスタムウィンドウの機能を失っているようです。幸いにも、それはまだそのRolling.applyメソッドを保持しています。あなたは特別なウィンドウを意味する場合

は、これを行うための一つの方法は、任意の正規化された配列とることである(要素の和を= 1)とnumpy.correlate(単にアレイ乗算と加算を組み合わされている)、それ.apply方法で:

>>> import numpy as np 
>>> import pandas as pd 
>>> df = pd.DataFrame({'a':[0,1,0,0,0,0],'b':[0,0,0,1,0,0]}) 
>>> print df 
    a b 
0 0 0 
1 1 0 
2 0 0 
3 0 1 
4 0 0 
5 0 0 
>>> my_array = np.array([1,2,3]) 
>>> # Below implements a weighted mean 
>>> df.rolling(len(my_array)).apply(lambda column: np.correlate(column,my_array/sum(my_array))) 
      a   b 
0  NaN  NaN 
1  NaN  NaN 
2 0.333333 0.000000 
3 0.166667 0.500000 
4 0.000000 0.333333 
5 0.000000 0.166667 
>>> # Same thing, but thanks to '[0]' we can have min_periods < len(my_array) 
>>> df.rolling(len(my_array),min_periods=1).apply(lambda column: np.correlate(column,my_array/sum(my_array))[0]) 
      a   b 
0 0.000000 0.000000 
1 0.500000 0.000000 
2 0.333333 0.000000 
3 0.166667 0.500000 
4 0.000000 0.333333 
5 0.000000 0.166667 

編集:Numpyにはweight引数を持つaverage()メソッドもあります。簡単な加重平均を行うだけなら、それを実行してください。

関連する問題