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()
メソッドもあります。簡単な加重平均を行うだけなら、それを実行してください。