こんにちは!
皆さんは、累積和・累積積をPandasで計算したいと思ったことはありませんか?
Pandasで累積和を計算するには「cumsum()」、累積積を計算するには「cumprod()」を使うと簡単に計算することができますよ。
今回の記事では、以下の内容について紹介します。
- cumsum()の使い方
- cumprod()の使い方
今回は、以下のDataFrameを例として使用します。
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
print(df)
実行結果
A B C
0 1 4 7
1 2 5 8
2 3 6 9
累積和を計算する cumsum()
Pandasで累積和を計算するには「cumsum()」を使用します。
デフォルトでは、列ごとに累積和の計算を行います。行ごとに計算する際には、「axis=1」とします。
print(df.cumsum())
実行結果
A B C
0 1 4 7
1 3 9 15
2 6 15 24
欠損値への扱いについて
欠損値のあるDataFrameについての扱いを紹介します。
以下のようにNaNのあるDataFrameに対して操作を行います。
import pandas as pd
df = pd.DataFrame({'A': [1, float('nan'), 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
print(df)
実行結果
A B C
0 1.0 4 7
1 NaN 5 8
2 3.0 6 9
では早速このデータに対して累積和を計算してみましょう。
デフォルトでは、NaNのあるデータは無視されて計算されます。
print(df.cumsum())
実行結果
A B C
0 1.0 4 7
1 NaN 9 15
2 4.0 15 24
Aの列を見ると、NaNの部分が飛ばされて計算されていることがわかりますね。
次に、NaNを無視せずに累積和の計算を行いましょう。
NaNを無視しないようにするには、「skipna=False」とします。
NaNを無視せずに計算すると、数字とNaNの和はNaNになるため、NaN以降の要素は全てNaNとなります。
print(df.cumsum(skipna=False))
実行結果
A B C
0 1.0 4 7
1 NaN 9 15
2 NaN 15 24
NaNを無視する場合とは違い、NaN以降の要素がNaNになっているのがわかりますね。
累積積を計算する cumprod()
Pandasで累積積を計算するには「cumprod()」を使用します。
デフォルトでは、列ごとに累積積の計算を行います。行ごとに計算する際には、「axis=1」とします。
print(df.cumprod())
実行結果
A B C
0 1 4 7
1 2 20 56
2 6 120 504
欠損値NaNへの扱いに関しては、cumsum()と同様であるため、そちらを参考にしてください。
まとめ
今回の記事では、以下の内容について紹介しました。
- cumsum()の使い方
- cumprod()の使い方
→DataFrameに対して使用
対象を行・列に変更可能
NaNの扱いに注意
しっかりと覚えておいて、いざ使用するときにしっかりと注意点などを思い出せるようにしましょう!