Pandasでグループごとのオフセットを計算する方法


次のメソッドを使用して、pandas DataFrame でグループシフトされた値を計算できます。

方法 1: グループごとにオフセットを計算する

 df[' lagged_values '] = df. groupby ([' group '])[' values ']. shift ( 1 )

方法 2: 複数のグループによるオフセットを計算する

 df[' lagged_values '] = df. groupby ([' group1 ', ' group2 '])[' values ']. shift ( 1 )

SHIFT()関数の値は、シフトを計算する値の数を示すことに注意してください。

次の例は、各メソッドを実際に使用する方法を示しています。

例 1: グループごとにオフセットを計算する

2 つの店舗による連続した日の売上を示す次のパンダ データフレームがあるとします。

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]})
#view DataFrame
print (df)

  blind sales
0 to 18
1 to 10
2 to 14
3 to 13
4 B 19
5 B 24
6 B 25
7 B 29

次の構文を使用して、各店舗の前日の売上を表示するオフセット列を作成できます。

 #add column that displays lag of sales column by store
df[' lagged_sales '] = df. groupby ([' store '])[' sales ']. shift ( 1 )

#view updated DataFrame
print (df)

  store sales lagged_sales
0 to 18 NaN
1 to 10 18.0
2 A 14 10.0
3 A 13 14.0
4 B 19 NaN
5 B 24 19.0
6 B 25 24.0
7 B 29 25.0

結果を解釈する方法は次のとおりです。

  • 店舗 A の sales 列には前の値がないため、offset 列の最初の値はNaNになります。
  • offset 列の 2 番目の値は、店舗 A の sales 列の前の値であるため、 18です。

等々。

例 2: 複数のグループによるオフセットを計算する

2 つの店舗の従業員による連続した日の売上を示す次のパンダ データフレームがあるとします。

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' employee ':['O', 'O', 'R', 'R', 'O', 'O', 'R', 'R'],
                   ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]})
#view DataFrame
print (df)

  store employee sales
0 AO 18
1 AO 10
2 AR 14
3 AR 13
4 BO 19
5 BO 24
6 BR 25
7 BR 29

次の構文を使用して、各店舗の各従業員の前日の売上を表示するオフセット列を作成できます。

 #add column that displays lag of sales column by store and employee
df[' lagged_sales '] = df. groupby ([' store ',' employee '])[' sales ']. shift ( 1 )

#view updated DataFrame
print (df)

  store employee sales lagged_sales
0 AO 18 NaN
1 AO 10 18.0
2 AR 14 NaN
3 AR 13 14.0
4 BO 19 NaN
5 BO 24 19.0
6 BR 25 NaN
7 BR 29 25.0

新しいlagged_sales列には、各店舗の各従業員の前日の売上が表示されます。

: この例では 2 つの列ごとにグループ化していますが、 groupby()関数に必要な数の変数名を含めることにより、必要な数の列ごとにグループ化することができます。

追加リソース

次のチュートリアルでは、パンダで他の一般的なタスクを実行する方法を説明します。

Pandasで列を削除する方法
Pandas で列を除外する方法
Pandas で選択した列に関数を適用する方法
Pandas DataFrame で列の順序を変更する方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です