Cara menghitung offset per grup di pandas


Anda dapat menggunakan metode berikut untuk menghitung nilai pergeseran grup di pandas DataFrame:

Metode 1: Hitung offset berdasarkan grup

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

Metode 2: Hitung offset oleh beberapa grup

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

Perhatikan bahwa nilai fungsi shift() menunjukkan jumlah nilai yang akan digunakan untuk menghitung pergeseran.

Contoh berikut menunjukkan cara menggunakan masing-masing metode dalam praktik.

Contoh 1: Hitung offset berdasarkan grup

Katakanlah kita memiliki pandas DataFrame berikut yang menunjukkan penjualan yang dilakukan oleh dua toko pada hari berturut-turut:

 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

Kita dapat menggunakan sintaks berikut untuk membuat kolom offset yang menampilkan penjualan hari sebelumnya untuk setiap toko:

 #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

Berikut cara menafsirkan hasilnya:

  • Nilai pertama pada kolom offset adalah NaN karena tidak ada nilai sebelumnya pada kolom penjualan untuk toko A.
  • Nilai kedua pada kolom offset adalah 18 karena merupakan nilai sebelumnya pada kolom penjualan toko A.

Dan seterusnya.

Contoh 2: Hitung offset oleh beberapa grup

Misalkan kita memiliki panda DataFrame berikut yang menunjukkan penjualan yang dilakukan oleh karyawan dua toko pada hari berturut-turut:

 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

Kita dapat menggunakan sintaks berikut untuk membuat kolom offset yang menampilkan penjualan hari sebelumnya untuk setiap karyawan di setiap toko:

 #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

Kolom lagged_sales baru menampilkan penjualan hari sebelumnya untuk setiap karyawan di setiap toko.

Catatan : Dalam contoh ini, kami telah mengelompokkan berdasarkan dua kolom, namun Anda dapat mengelompokkan berdasarkan kolom sebanyak yang Anda inginkan dengan menyertakan nama variabel sebanyak yang Anda inginkan dalam fungsi groupby() .

Sumber daya tambahan

Tutorial berikut menjelaskan cara melakukan tugas umum lainnya di panda:

Cara menghapus kolom di Pandas
Cara mengecualikan kolom di Pandas
Cara menerapkan fungsi ke kolom yang dipilih di Pandas
Bagaimana mengubah urutan kolom di Pandas DataFrame

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *