http://pandas.pydata.org/pandas-docs/stable/groupby.html
ここ読んでいて、突如rolling()という関数が出てきた。
APIリファレンスを見てもよくわからず戸惑ったので、簡単な例でどんなメソッドなのかつかんでみる。
まずは適当に使ってみる。
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: s = pd.Series(range(0,7))
In [4]: s
Out[4]:
0 0
1 1
2 2
3 3
4 4
5 5
6 6
dtype: int64
In [5]: s.rolling(window=3, min_periods=3).mean()
Out[5]:
0 NaN
1 NaN
2 1.0
3 2.0
4 3.0
5 4.0
6 5.0
dtype: float64
Out[5]からわかるように、rolling()
とmean()
により、Series s
の各要素について、(その要素を含み)それ以前の3つ分の平均値を算出することができる。つまり移動平均値が算出される。
例えばindex=3
について見ると、index=1,2,3
の要素の値がそれぞれ1,2,3
なので、それら3個の平均値である2.0
が出力されている。
index=0, 1
の要素については、それ以前に必要なだけの要素数が無いので、計算が行われずNanが出力されている。
index
を遡って計算対象とする要素数を決めるのがwindow
であり、有効な計算結果を出すのに最低限必要な要素数を指定するのがmin_periods
である。なので、「4要素の平均を出したい。最低限2要素あれば結果を出力したい」場合は以下のように指定すれば良い。
In [6]: s.rolling(window=4, min_periods=2).mean()
Out[6]:
0 NaN
1 0.5
2 1.0
3 1.5
4 2.5
5 3.5
6 4.5
dtype: float64
また、center=True
とすると、起点とするindex
とその前後あわせてwindow
個の要素を計算対象とする。
In [7]: s.rolling(window=3, min_periods=3, center=True).mean()
Out[7]:
0 NaN
1 1.0
2 2.0
3 3.0
4 4.0
5 5.0
6 NaN
dtype: float64