【Python】Pandasでデータをずらす方法を解説!シフト(shift)操作でデータ解析をもっと便利に

はじめに:データをずらす操作の意義とPandasでのシフト操作の利点

データ解析では、時系列データや移動平均、差分などの演算が必要になることがあります。このような演算を行う場合、データをずらすことが必要になります。Pandasには、データをずらすための便利な機能である「shift」が用意されています。この記事では、Pandasを使ったデータのずらし方を解説し、データ解析の効率化に役立てる方法を紹介します。

shift関数の基本:データをずらす基本的な方法とパラメーター

shift関数を使うと、データを指定した回数だけずらすことができます。例えば、以下のようなデータフレームがあるとします。

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
                   'B': [6, 7, 8, 9, 10],
                   'C': [11, 12, 13, 14, 15]})
print(df)

このデータフレームを、1行ずらす場合は、以下のようにshift関数を使います。

df_shifted = df.shift(1)
print(df_shifted)

上記のコードを実行すると、以下のような出力が得られます。

     A    B     C
0  NaN  NaN   NaN
1  1.0  6.0  11.0
2  2.0  7.0  12.0
3  3.0  8.0  13.0
4  4.0  9.0  14.0

shift関数では、ずらす回数を引数で指定することができます。また、デフォルトでは行方向にずらしますが、列方向にずらす場合は、引数の「axis」を1に指定します。

行方向にデータをずらす:行方向へのシフト操作でデータ解析を強化

行方向にデータをずらすと、時系列データの場合に特に有用な解析ができます。例えば、以下のような時系列データがあるとします。

import pandas as pd
index = pd.date_range('20220501', periods=5, freq='D')
df = pd.DataFrame({'sales': [10, 20, 30, 40, 50]}, index=index)
print(df)

このデータフレームを1日ずらす場合は、以下のようにshift関数を使います。

df_shifted = df.shift(1, freq='D')
print(df_shifted)

上記のコードを実行すると、以下のような出力が得られます。

            sales
2022-05-02   10.0
2022-05-03   20.0
2022-05-04   30.0
2022-05-05   40.0
2022-05-06   50.0

shift関数では、freq引数を使って日付のずらし方を指定することができます。このように、時系列データに対しては、日付のずらし方を指定することが重要です。

列方向にデータをずらす:列方向へのシフト操作でデータ解析をもっと便利に

列方向にデータをずらすと、データの差分を取ることができます。例えば、以下のようなデータフレームがあるとします。

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
                   'B': [6, 7, 8, 9, 10],
                   'C': [11, 12, 13, 14, 15]})
print(df)

このデータフレームを、列方向に1つずらして差分を取る場合は、以下のようにshift関数を使います。

df_shifted = df - df.shift(1, axis=1)
print(df_shifted)

上記のコードを実行すると、以下のような出力が得られます。

     A    B    C
0  NaN  5.0  5.0
1  NaN  5.0  5.0
2  NaN  5.0  5.0
3  NaN  5.0  5.0
4  NaN  5.0  5.0

このように、列方向にずらして差分を取ることで、データの変化を分析することができます。

fillna関数との組み合わせ:シフト後の欠損値を適切に処理する方法

shift関数を使ってデータをずらす場合、欠損値が生じることがあります。欠損値を適切に処理するためには、fillna関数と組み合わせて使うことができます。

例えば、以下のようなデータフレームがあるとします。

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [1, 2, np.nan, 4, 5],
                   'B': [6, 7, 8, 9, 10],
                   'C': [11, 12, 13, 14, 15]})
print(df)

このデータフレームを、1つずらして欠損値を処理する場合は、以下のようにfillna関数を使います。

df_shifted = df.shift(1).fillna(method='bfill')
print(df_shifted)

上記のコードを実行すると、以下のような出力が得られます。

     A     B     C
0  1.0   6.0  11.0
1  1.0   6.0  11.0
2  2.0   7.0  12.0
3  4.0   8.0  13.0
4  4.0   9.0  14.0

fillna関数の引数には、’bfill’を指定しています。これは、欠損値を後ろの値で埋めることを意味します。

まとめ:Pandasを使ったデータのずらし方で覚えておくべきポイント

この記事では、Pandasを使ったデータのずらし方について解説しました。以下は、覚えておくべきポイントです。

  • shift関数を使うことで、データを指定した回数だけずらすことができます。
  • 行方向にデータをずらす場合、時系列データに対してはfreq引数を使って日付のずらし方を指定することが重要です。
  • 列方向にデータをずらす場合、差分を取ることができます。
  • 欠損値が生じた場合は、fillna関数を使って適切に処理することができます。

Pandasを使ったデータ解析では、データをずらす操作が頻繁に必要になります。この記事を参考に、shift関数を使ってデータを効率的にずらす方法をマスターしましょう。