Python のデータ分析ライブラリ Pandas を使って「累積和(cumulative sum)」を計算する方法について、基礎から応用まで詳しく解説します。
累積和は、時系列データの傾向分析や数値の推移を追うときに非常に役立つ基本的な集計手法の一つです。
目次
基本的な累積和の計算方法:cumsum()
Pandas には、累積和を計算するための専用メソッド cumsum()
が用意されています。
これを使うと、Series や DataFrame に対して簡単に累積和を求めることができます。
サンプルデータを使った基本例
import pandas as pd
# サンプルデータ
data = {'売上': [100, 200, 150, 300, 250]}
df = pd.DataFrame(data)
# 累積和の計算
df['累積売上'] = df['売上'].cumsum()
print(df)
出力
売上 累積売上
0 100 100
1 200 300
2 150 450
3 300 750
4 250 1000
複数列の DataFrame での累積和
DataFrame に複数の数値列がある場合、全体に対して .cumsum()
を適用すると、数値列すべてに対して個別に累積和が適用されます。
df = pd.DataFrame({
'売上': [100, 200, 150, 300, 250],
'費用': [80, 120, 90, 200, 160]
})
df_cumsum = df.cumsum()
print(df_cumsum)
グループごとの累積和:groupby()
との併用
たとえば、「支店ごとの累積売上」のようなケースでは、groupby()
と .cumsum()
を組み合わせて使用します。
df = pd.DataFrame({
'支店': ['A', 'A', 'B', 'B', 'A', 'B'],
'売上': [100, 150, 200, 120, 180, 160]
})
# 支店ごとの累積売上
df['支店別累積売上'] = df.groupby('支店')['売上'].cumsum()
print(df)
出力
支店 売上 支店別累積売上
0 A 100 100
1 A 150 250
2 B 200 200
3 B 120 320
4 A 180 430
5 B 160 480
日付順に並べてから累積和を取る(時系列処理)
累積和は時系列に依存する場合が多いため、日付や時刻でソートしたうえで計算するのが一般的です。
df = pd.DataFrame({
'日付': pd.to_datetime(['2025-07-10', '2025-07-08', '2025-07-09']),
'売上': [300, 100, 200]
})
# 日付順に並べ替えて累積売上を計算
df = df.sort_values('日付')
df['累積売上'] = df['売上'].cumsum()
print(df)
欠損値(NaN)がある場合の挙動
NaN
がある場合、cumsum()
の動作に注意が必要です。
df = pd.DataFrame({'売上': [100, None, 200, 150]})
df['累積売上'] = df['売上'].cumsum()
print(df)
注意点
NaN
が出現した地点から、累積値もNaN
になります。fillna()
を使って事前に補完するのが一般的です。
移動平均や差分との比較
処理 | 内容 |
---|---|
cumsum() | 累積和(足し上げていく) |
diff() | 前の行との差(差分) |
rolling() | 移動平均などのローリング演算 |
累積和は時間に沿って積み上がっていくイメージで、売上やユーザー数などの蓄積的な指標に向いています。
よくある活用例
- 日々の売上累積の可視化(棒グラフや折れ線グラフと併用)
- ユーザー登録数の推移
- グループ別の成長度比較
- 財務データのトレンド分析
補足:可視化(Matplotlib を使う)
import matplotlib.pyplot as plt
df = pd.DataFrame({
'日付': pd.date_range(start='2025-07-01', periods=5),
'売上': [100, 150, 200, 250, 300]
})
df['累積売上'] = df['売上'].cumsum()
plt.plot(df['日付'], df['累積売上'], marker='o')
plt.title('累積売上の推移')
plt.xlabel('日付')
plt.ylabel('累積売上')
plt.grid(True)
plt.show()
まとめ
項目 | 内容 |
---|---|
基本構文 | df['列名'].cumsum() |
複数列 | df.cumsum() |
グループ別累積 | df.groupby('列')['数値列'].cumsum() |
ソートして累積 | .sort_values('日付') を併用 |
欠損値への対応 | fillna() で事前補完 |
可視化と組み合わせ | matplotlib で折れ線グラフに |
累積和はとてもシンプルですが、使い方次第でデータの理解が一気に深まります。
以上、PythonのPandasで累積和を計算する方法についてでした。
最後までお読みいただき、ありがとうございました。