Pandas: วิธีใช้ฟังก์ชัน mutate() เทียบเท่ากับ r
ในภาษาการเขียนโปรแกรม R เราสามารถใช้ฟังก์ชัน mutate() จากแพ็คเกจ dplyr เพื่อเพิ่มคอลัมน์ใหม่ลงในเฟรมข้อมูลที่คำนวณจากคอลัมน์ที่มีอยู่อย่างรวดเร็ว
ตัวอย่างเช่น รหัสต่อไปนี้แสดงวิธีการคำนวณค่าเฉลี่ยของคอลัมน์เฉพาะใน R และเพิ่มค่านั้นเป็นคอลัมน์ใหม่ในกรอบข้อมูล:
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
ฟังก์ชัน mutate() ที่เทียบเท่ากับฟังก์ชันใน pandas ก็คือฟังก์ชัน Transform()
ตัวอย่างต่อไปนี้แสดงวิธีใช้ฟังก์ชันนี้ในทางปฏิบัติ
ตัวอย่าง: การใช้ Transformer() ใน Pandas เพื่อทำซ้ำ mutate() ใน R
สมมติว่าเรามี DataFrame แพนด้าต่อไปนี้ซึ่งแสดงคะแนนที่ผู้เล่นบาสเกตบอลจากทีมต่างๆ:
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
เราสามารถใช้ฟังก์ชัน Transformer() เพื่อเพิ่มคอลัมน์ใหม่ชื่อ Mean_points ซึ่งแสดงคะแนนเฉลี่ยที่แต่ละทีมทำได้:
#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
ค่าคะแนนเฉลี่ยสำหรับผู้เล่นในทีม A คือ 21.25 และค่าคะแนนเฉลี่ยสำหรับผู้เล่นในทีม B คือ 18.25 ดังนั้นค่าเหล่านี้จึงถูกกำหนดตามผู้เล่นแต่ละคนในคอลัมน์ใหม่
โปรดทราบว่าสิ่งนี้ตรงกับผลลัพธ์ที่ได้รับโดยใช้ฟังก์ชัน mutate() ในตัวอย่างเบื้องต้น
เป็นที่น่าสังเกตว่าคุณยังสามารถใช้ แลมบ์ดา เพื่อทำการคำนวณแบบกำหนดเองในฟังก์ชัน การแปลง () ได้
ตัวอย่างเช่น รหัสต่อไปนี้แสดงวิธีใช้ lambda เพื่อคำนวณ เปอร์เซ็นต์ของคะแนนรวมที่ผู้เล่นแต่ละคนในทีมของตนทำได้:
#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
ต่อไปนี้เป็นวิธีการตีความผลลัพธ์:
- ผู้เล่นคนแรกของทีม A ทำคะแนนได้ 30 คะแนนจากทั้งหมด 85 คะแนนในบรรดาผู้เล่นของทีม A ดังนั้น เปอร์เซ็นต์ของคะแนนรวมของเขาที่ได้คือ 30/85 = 0.352941
- ผู้เล่นคนที่สองของทีม A ทำคะแนนได้ 22 คะแนนจากทั้งหมด 85 คะแนนในบรรดาผู้เล่นของทีม A ดังนั้น เปอร์เซ็นต์ของคะแนนรวมของเขาที่ได้คือ 22/85 = 0.258824
และอื่นๆ
โปรดทราบว่าเราสามารถใช้อาร์กิวเมนต์ แลม บ์ดาในฟังก์ชัน Transform() เพื่อทำการคำนวณแบบกำหนดเองที่เราต้องการได้
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการทั่วไปอื่น ๆ ในแพนด้า:
วิธีดำเนินการผลรวม GroupBy ใน Pandas
วิธีใช้ Groupby และ Plot ใน Pandas
วิธีนับค่าที่ไม่ซ้ำโดยใช้ GroupBy ใน Pandas