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