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で行・列の差分を取得する方法についてでした。
最後までお読みいただき、ありがとうございました。