วิธีใช้ฟังก์ชัน groupby() และ transformer() ใน pandas
คุณสามารถใช้วิธีต่อไปนี้เพื่อใช้ฟังก์ชัน groupby() และ Transformer() ร่วมกันใน DataFrame ของ pandas:
วิธีที่ 1: ใช้ groupby() และ Transformer() ด้วยฟังก์ชันในตัว
df[' new '] = df. groupby (' group_var ')[' value_var ']. transform (' mean ')
วิธีที่ 2: ใช้ groupby() และ Transformer() ด้วยฟังก์ชันที่กำหนดเอง
df[' new '] = df. groupby (' group_var ')[' value_var ']. transform ( lambda x: some function)
ตัวอย่างต่อไปนี้แสดงวิธีการใช้แต่ละวิธีในทางปฏิบัติกับ Pandas 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
ตัวอย่างที่ 1: ใช้ groupby() และ Transformer() พร้อมฟังก์ชันในตัว
รหัสต่อไปนี้แสดงวิธีการใช้ฟังก์ชัน groupby( ) และ Transformer() เพื่อเพิ่มคอลัมน์ใหม่ให้กับ DataFrame ที่เรียกว่า 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
ค่าคะแนนเฉลี่ยสำหรับผู้เล่นในทีม A คือ 21.25 และค่าคะแนนเฉลี่ยสำหรับผู้เล่นในทีม B คือ 18.25 ดังนั้นค่าเหล่านี้จึงถูกกำหนดตามผู้เล่นแต่ละคนในคอลัมน์ใหม่
โปรดทราบว่าเราสามารถใช้ฟังก์ชันในตัวอื่น เช่น sum() เพื่อสร้างคอลัมน์ใหม่ที่แสดงผลรวมคะแนนของแต่ละทีม:
#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
ผลรวมคะแนนของผู้เล่นทีม A คือ 85 และคะแนนรวมของผู้เล่นทีม B คือ 73 ดังนั้นค่าเหล่านี้จึงถูกกำหนดตามผู้เล่นแต่ละคนในคอลัมน์ใหม่
ตัวอย่างที่ 2: ใช้ groupby() และ Transformer() กับฟังก์ชันที่กำหนดเอง
รหัสต่อไปนี้แสดงวิธีใช้ฟังก์ชัน groupby( ) และ Transformer() เพื่อสร้างฟังก์ชันแบบกำหนดเองที่คำนวณเปอร์เซ็นต์ของคะแนนรวมที่ทำโดยผู้เล่นแต่ละคนในทีมของตน:
#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