PythonのPandasで累積和を計算する方法について

Pandas,イメージ

AI実装検定のご案内

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で累積和を計算する方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次