以前の記事で、pandas DataFrameの window関数である、 rollingを紹介しました。
参考:pandasで移動平均や高値線、安値線を計算する
これは、直近n個の値に対して和や最大値、最小値、平均や分散を求めるものです。
場合によっては、直近n個ではなく最初の値から全てに対して順に行いたいことがあると思います。
演算が和であればcumsumで累積和を取るように。
どうやらpandasのversion 0.18.0からそのような関数が実装されたようです。
pandas.DataFrame.expanding
とりあえずやってみましょう。
和だったらcumsumを使えば済む話なので、
平均と標準偏差でやってみます。
(元データが乱数だとそんなに面白いものでも無いので、結果は省略。コピーして動かしてみてください。)
# データ生成
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(100, 5))
print(df.shape) # (100, 5)
# 平均
df.expanding().mean()
# 標準偏差
df.expanding().std()
# aggを使ってまとめて算出も可能。
df.expanding().agg(["mean", "std"])