Pandas: cara menggunakan fungsi mutate() yang setara dengan r
Dalam bahasa pemrograman R, kita dapat menggunakan fungsi mutate() dari paket dplyr untuk dengan cepat menambahkan kolom baru ke bingkai data yang dihitung dari kolom yang ada.
Misalnya, kode berikut menunjukkan cara menghitung nilai rata-rata kolom tertentu di R dan menambahkan nilai tersebut sebagai kolom baru dalam bingkai data:
library (dplyr) #create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), points=c(30, 22, 19, 14, 14, 11, 20, 28)) #add new column that shows mean points by team df <- df %>% group_by(team) %>% mutate(mean_points = mean(points)) #view updated data frame df team points mean_points 1 to 30 21.2 2 A 22 21.2 3 A 19 21.2 4 A 14 21.2 5 B 14 18.2 6 B 11 18.2 7 B 20 18.2 8 B 28 18.2
Setara dengan fungsi mutate() di panda adalah fungsi transform() .
Contoh berikut menunjukkan cara menggunakan fungsi ini dalam praktiknya.
Contoh: menggunakan transform() di panda untuk mereplikasi mutate() di R
Misalkan kita memiliki panda DataFrame berikut yang menunjukkan poin yang dicetak oleh pemain bola basket dari tim berbeda:
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
Kita dapat menggunakan fungsi transform() untuk menambahkan kolom baru bernama Mean_points yang menunjukkan rata-rata poin yang dicetak oleh masing-masing tim:
#add new column to DataFrame that shows mean points by team 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 ini cocok dengan hasil yang diperoleh menggunakan fungsi mutate() pada contoh pendahuluan.
Perlu dicatat bahwa Anda juga dapat menggunakan lambda untuk melakukan perhitungan khusus dalam fungsi transform() .
Misalnya, kode berikut menunjukkan cara menggunakan lambda untuk menghitung persentase total poin yang dicetak oleh setiap pemain di timnya 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