Cara menggunakan fungsi groupby() dan transform() di pandas
Anda dapat menggunakan metode berikut untuk menggunakan fungsi groupby() dan transform() bersama-sama dalam pandas DataFrame:
Metode 1: Gunakan groupby() dan transform() dengan fungsi bawaan
df[' new '] = df. groupby (' group_var ')[' value_var ']. transform (' mean ')
Metode 2: Gunakan groupby() dan transform() dengan fungsi khusus
df[' new '] = df. groupby (' group_var ')[' value_var ']. transform ( lambda x: some function)
Contoh berikut menunjukkan cara menggunakan setiap metode dalam praktik dengan pandas DataFrame berikut:
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], ' points ': [30, 22, 19, 14, 14, 11, 20, 28]}) #view DataFrame print (df) team points 0 to 30 1 to 22 2 to 19 3 to 14 4 B 14 5 B 11 6 B 20 7 B 28
Contoh 1: Gunakan groupby() dan transform() dengan fungsi bawaan
Kode berikut menunjukkan cara menggunakan fungsi groupby( ) dan transform() untuk menambahkan kolom baru ke DataFrame yang disebut mean_points:
#create new column called mean_points
df[' mean_points '] = df. groupby (' team ')[' points ']. transform (' mean ')
#view updated DataFrame
print (df)
team points mean_points
0 to 30 21.25
1 to 22 21.25
2 A 19 21.25
3 to 14 21.25
4 B 14 18.25
5 B 11 18.25
6 B 20 18.25
7 B 28 18.25
Nilai rata-rata poin untuk pemain di Tim A adalah 21,25 dan nilai rata-rata poin untuk pemain di Tim B adalah 18,25 , jadi nilai-nilai ini diberikan sesuai dengan masing-masing pemain di kolom baru.
Perhatikan bahwa kita juga bisa menggunakan fungsi bawaan lain seperti sum() untuk membuat kolom baru yang menampilkan jumlah poin yang dicetak untuk setiap tim:
#create new column called sum_points
df[' sum_points '] = df. groupby (' team ')[' points ']. transform (' sum ')
#view updated DataFrame
print (df)
team points sum_points
0 to 30 85
1 to 22 85
2 A 19 85
3 to 14 85
4 B 14 73
5 B 11 73
6 B 20 73
7 B 28 73
Jumlah poin pemain tim A adalah 85 dan jumlah poin pemain tim B adalah 73 , sehingga nilai-nilai ini diberikan kepada masing-masing pemain di kolom baru.
Contoh 2: Gunakan groupby() dan transform() dengan fungsi khusus
Kode berikut menunjukkan cara menggunakan fungsi groupby( ) dan transform() untuk membuat fungsi khusus yang menghitung persentase total poin yang dicetak oleh setiap pemain di tim masing-masing:
#create new column called percent_of_points
df[' percent_of_points '] = df. groupby (' team ')[' points ']. transform ( lambda x:x/ x.sum ())
#view updated DataFrame
print (df)
team points percent_of_points
0 A 30 0.352941
1 A 22 0.258824
2 A 19 0.223529
3 A 14 0.164706
4 B 14 0.191781
5 B 11 0.150685
6 B 20 0.273973
7 B 28 0.383562
Berikut cara menafsirkan hasilnya:
- Pemain pertama Tim A mencetak 30 poin dari total 85 pemain Tim A. Jadi, persentase total poin yang dicetaknya adalah 30/85 = 0,352941 .
- Pemain kedua Tim A mencetak 22 poin dari total 85 pemain Tim A. Jadi, persentase total poin yang dicetaknya adalah 22/85 = 0,258824 .
Dan seterusnya.
Perhatikan bahwa kita dapat menggunakan argumen lambda dalam fungsi transform() untuk melakukan penghitungan khusus apa pun yang kita inginkan.
Sumber daya tambahan
Tutorial berikut menjelaskan cara melakukan operasi umum lainnya di panda:
Cara melakukan penjumlahan GroupBy di Pandas
Cara menggunakan Groupby dan Plot di Pandas
Cara menghitung nilai unik menggunakan GroupBy di Pandas