数列に対して、最初の項からn番目の項まで足したものの数列が必要になることがあります。
日々の売上データからその日までの累計の売上データを出すような計算ですね。
イメージとしては、
1,2,3,4,5,…に対して、1,3,6,10,15,… を得るような操作です。
スライスと内包表記を組み合わせてもいいし、足し算くらいならfor文を回しても問題ないのですが、
numpyやpandas に専用の関数が用意されているのでその紹介です。
ドキュメントはこの辺
numpy.cumsum
pandas.Series.cumsum
早速実行してみました。
import numpy as np
import pandas as pd
ary = np.arange(1, 11)
print(ary)
# [ 1 2 3 4 5 6 7 8 9 10]
print(ary.cumsum())
# [ 1 3 6 10 15 21 28 36 45 55]
series = pd.Series(np.arange(1, 11))
print(series)
'''
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
dtype: int64
'''
print(series.cumsum())
'''
0 1
1 3
2 6
3 10
4 15
5 21
6 28
7 36
8 45
9 55
dtype: int64
'''
よく似た関数として、
numpyには累積の積を返すcumprodが用意されており、
さらにpandasの方にはcumprodに加えて、そこまでの最大値と最小値を得られるcummax, cumminが用意されています。