PythonのPandasで行・列の差分を取得する方法について

Python,イメージ

AI実装検定のご案内

Pythonの代表的なデータ処理ライブラリである Pandas には、この「差分」を簡単に取得できる便利な機能が多数用意されています。

diff()pct_change()、さらには shift() を組み合わせることで、時系列データの傾向分析や異常検知、レポート作成などに不可欠な差分処理を効率的に実現できます。

目次

セクション1:基本のデータフレーム作成

まずは、差分を計算するためのサンプルデータを用意します。

import pandas as pd

# サンプルの売上データ
df = pd.DataFrame({
    '売上A': [100, 120, 150, 130],
    '売上B': [90, 95, 100, 110]
})

print("▼元のデータフレーム")
print(df)

セクション2:行方向(縦)の差分を計算する

各列において「前の行との差分」を求めるには .diff() を使います。

# 行ごとの差分(縦方向)
df_row_diff = df.diff()

print("\n▼行方向の差分(df.diff())")
print(df_row_diff)

セクション3:列方向(横)の差分を計算する

同じ行内で「左の列との差分」を取得するには、axis=1 を指定します。

# 列ごとの差分(横方向)
df_col_diff = df.diff(axis=1)

print("\n▼列方向の差分(df.diff(axis=1))")
print(df_col_diff)

セクション4:特定の列だけ差分を取りたい場合

たとえば「売上A」列だけを対象に差分を取り、新しい列として追加することも可能です。

# '売上A' 列の差分を新しい列に追加
df['売上A_差分'] = df['売上A'].diff()

print("\n▼売上A列の差分を追加")
print(df)

セクション5:複数段階の差分(2階差分など)

2階差分(差分の差分)を計算すると、変化の加速度的な傾向が見えます。

# 2階差分(差分の差分)
df['売上A_2階差'] = df['売上A'].diff().diff()

print("\n▼売上Aの2階差分")
print(df[['売上A', '売上A_2階差']])

セクション6:パーセンテージ(割合)の変化を求める

差分を「増減率(%)」で見たい場合は、.pct_change() を使います。

# 売上Aのパーセンテージ変化(%)
df['売上A_変化率'] = df['売上A'].pct_change()

print("\n▼売上Aのパーセンテージ変化")
print(df[['売上A', '売上A_変化率']])

セクション7:複数列の差分を一括で計算する

DataFrame全体、または複数列をまとめて処理したい場合は .diff() をそのまま使えます。

# 売上Aと売上Bの差分を一括取得
df_multi_diff = df[['売上A', '売上B']].diff()

print("\n▼複数列の差分(売上A・売上B)")
print(df_multi_diff)

セクション8:NaNの処理(補完または削除)

diff() の結果は最初の行が NaN になりますが、補完や削除も可能です。

# NaNを0で埋める
df_filled = df.diff().fillna(0)

print("\n▼NaNを0で補完した差分")
print(df_filled)

# NaNを削除
df_dropped = df.diff().dropna()

print("\n▼NaNを削除した差分")
print(df_dropped)

セクション9:shift() を使って任意の差分を取る

任意の過去の行と現在行の差分を明示的に取りたい場合には、.shift(n) を使って柔軟に差分を取れます。

# 1行前との比較
df['売上A_1行前差'] = df['売上A'] - df['売上A'].shift(1)

# 2行前との比較
df['売上A_2行前差'] = df['売上A'] - df['売上A'].shift(2)

print("\n▼任意の過去行とのカスタム差分")
print(df[['売上A', '売上A_1行前差', '売上A_2行前差']])

セクション10:差分をグラフで可視化する(オプション)

数値の変化を視覚的に把握するには、matplotlib を使ったグラフ表示が便利です。

import matplotlib.pyplot as plt

# 売上Aとその差分の折れ線グラフ
df['売上A'].plot(label='売上A', marker='o')
df['売上A_差分'].plot(label='売上A_差分', marker='x')

plt.title("売上Aとその差分")
plt.legend()
plt.grid(True)
plt.show()

まとめ

分類メソッド説明
行方向の差分.diff()同一列内の前行との差
列方向の差分.diff(axis=1)同一行内の前列との差
パーセンテージ差分.pct_change()前行との%増減
任意行との差分.shift(n)前n行との差を手動で計算
欠損値処理.fillna() / .dropna()NaNを補完または除去

以上、PythonのPandasで行・列の差分を取得する方法についてでした。

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

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