PythonのPandasのshiftメソッドについて

Python,イメージ

AI実装検定のご案内

Pandasの shift メソッド は、時系列データや順序付きデータを扱うときに非常に便利な関数です。

特に「データを上下にずらす」処理を簡単に行えるので、前後の比較や差分計算などに多用されます。

以下で詳しく解説します。

目次

主な引数の意味

periods(デフォルト=1)

  • データを何行(または何列)ずらすかを指定します。
  • 正の値なら下方向(未来方向)、負の値なら上方向(過去方向)にシフトします。
import pandas as pd

s = pd.Series([10, 20, 30, 40, 50])
print(s.shift(1))
print(s.shift(-1))

freq

  • DatetimeIndex を持つ場合に利用可能で、日付や時間単位でシフトできます。
  • 例えば "D" は日単位、"M" は月単位です。
dates = pd.date_range("2023-01-01", periods=5)
s = pd.Series(range(5), index=dates)
print(s.shift(1, freq="D"))

freq を指定すると、インデックスごと移動します。

単純にデータをずらすのではなく、日付そのものがシフトされる点が重要です。

axis

  • データをどちらの軸でシフトするかを指定します。
    • axis=0(デフォルト):行方向にシフト
    • axis=1:列方向にシフト
df = pd.DataFrame({"A": [1, 2, 3], "B": [10, 20, 30]})
print(df.shift(1, axis=1))

fill_value

  • シフトによって生じた 欠損値(NaN) を指定した値で埋めます。
print(s.shift(1, fill_value=0))

よくある使い方

前日との差分を取る

import pandas as pd

df = pd.DataFrame({"value": [100, 105, 103, 110, 120]})

# 前日との差分
df["diff"] = df["value"] - df["value"].shift(1)
print(df)

過去N期間の値を参照

例えば株価データで「昨日の終値」「一昨日の終値」を作りたい場合:

import pandas as pd

df = pd.DataFrame({"Close": [100, 102, 101, 105, 107]})

# 昨日の値
df["yesterday"] = df["Close"].shift(1)

# 一昨日の値
df["two_days_ago"] = df["Close"].shift(2)

print(df)

移動平均と組み合わせ

import pandas as pd

df = pd.DataFrame({"value": [10, 20, 30, 40, 50]})

# 3期間移動平均
df["ma_3"] = df["value"].rolling(3).mean()

# 1つ前の移動平均
df["ma_3_prev"] = df["ma_3"].shift(1)

print(df)

shift と類似メソッドとの違い

  • tshift(古いバージョン):インデックスごとシフト(現在は shift(freq=...) で統合)
  • pct_changeshift を利用して割合変化を計算するメソッド
  • diff:差分を直接計算(s.diff(1)s - s.shift(1) と同じ)

まとめ

  • shift は「行や列をずらす」メソッドで、欠損を伴います。
  • 時系列データなら freq を使ってインデックス自体を移動できるのが大きな特徴。
  • 差分計算や前日比較、遅行変数(lag features)の生成などに広く活用されます。

以上、PythonのPandasのshiftメソッドについてでした。

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

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