Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pandas DataFrameの列をシフトする方法【shift()メソッド徹底解説】

Pandasでは、DataFrame全体を書き直すことなく、列の値を簡単に上下にシフトできるshift()メソッドが用意されています。時系列データの前後比較や、特徴量エンジニアリングなどで非常に便利な機能です。

shift()メソッドの基本構文

shift(self, periods=1, freq=None, axis=0, fill_value=None)

主なパラメータ

  • periods: シフトする期間(行数)を指定します。負の数を指定すると逆方向にシフトできます。デフォルトは1です。
  • axis: シフトの方向を指定します。0(デフォルト)でインデックス方向、1で列方向にシフトします。
  • fill_value: シフトによって生じた欠損値(NaN)を置き換える値を指定できます。

それでは、実際の例を使ってshift()メソッドの使い方を見ていきましょう。

手順

  • 2次元のサイズ可変な表形式データ(DataFrame)dfを作成します。
  • 入力のDataFrame df を表示します。
  • df["column_name"] = df.column_name.shift() のようにして、特定の列を選択してシフトします。
  • 更新後のDataFrameを表示します。

サンプルコード

import pandas as pd

df = pd.DataFrame(
   dict(
      name=['John', 'Jacob', 'Tom', 'Tim', 'Ally'],
      marks=[89, 23, 100, 56, 90],
      subjects=["Math", "Physics", "Chemistry", "Biology", "English"]
   )
)

print("入力DataFrame:\n", df)

# name列を1つ下にシフト
df["name"] = df.name.shift(1)
print("name列を1シフト後:\n", df)

# marks列を2つ下にシフト
df["marks"] = df.marks.shift(2)
print("marks列を2シフト後:\n", df)

# subjects列を1つ上にシフト
df["subjects"] = df.subjects.shift(-1)
print("subjects列を-1シフト後:\n", df)

実行結果

入力DataFrame:
      name  marks   subjects
0    John     89       Math
1   Jacob     23    Physics
2     Tom    100  Chemistry
3     Tim     56    Biology
4    Ally     90    English

name列を1シフト後:
      name  marks   subjects
0     NaN     89       Math
1    John     23    Physics
2   Jacob    100  Chemistry
3     Tom     56    Biology
4     Tim     90    English

marks列を2シフト後:
      name  marks   subjects
0     NaN    NaN       Math
1    John    NaN    Physics
2   Jacob   89.0  Chemistry
3     Tom   23.0    Biology
4     Tim  100.0    English

subjects列を-1シフト後:
      name  marks  subjects
0     NaN    NaN   Physics
1    John    NaN  Chemistry
2   Jacob   89.0    Biology
3     Tom   23.0    English
4     Tim  100.0       NaN

ポイント解説

  • 正のperiods指定:値が下方向に移動し、先頭行にはNaNが挿入されます。
  • 負のperiods指定:値が上方向に移動し、末尾行にはNaNが挿入されます。
  • fill_valueの活用df.name.shift(1, fill_value='Unknown')のように指定すれば、NaNの代わりに任意の値で埋めることができます。

このように、shift()メソッドを使えば、元のDataFrameを再作成することなく、特定の列だけを柔軟にシフトできます。データ分析や機械学習の前処理において、ラグ特徴量を作成する際などにぜひ活用してください。

  1. 【Python入門】MatplotlibでPandasデータフレームを可視化する方法(折れ線グラフ・円グラフ・ヒストグラム)

    Pandasのデータフレーム(DataFrame)は、Matplotlibと組み合わせることで、折れ線グラフ・円グラフ・ヒストグラムなど、さまざまな種類のグラフを簡単に描画できます。まずは、PandasとMatplotlibのライブラリをインポートしましょう。import pandas as pd import matplotlib.pyplot as pltそれでは、実際に各グラフの描画方法を見ていきましょう。折れ線グラフの描き方サンプルコード以下は、2列のデータを持つデータフレームから折れ線グラフを作成するコードです。import pandas as pd import matplotli

  2. Python Pandasでデータフレームの列の値をX軸ラベルとして設定する方法

    PythonのPandasでデータフレームの列の値をX軸ラベルとして設定するには、plot()メソッドの引数にxticksを指定します。これにより、データの値をそのまま目盛りラベルとして表示できるため、グラフがより読みやすくなります。手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。Pandasを使って、column1というキーを持つデータフレームを作成します。plot()メソッドでデータフレームをプロットし、column1の値をX軸ラベルとして指定します。図を表示するには、show()メソッドを使用します。コード例import pandas as pd fro