GroupBy และการรวมข้อมูล
df.groupby(), agg(), transform(), apply() และการรวมข้อมูลแบบตั้งชื่อด้วย Named Aggregation
GroupBy และการรวมข้อมูล เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
แนวคิดแบ่ง-ประมวลผล-รวม
GroupBy ใช้รูปแบบแบ่ง-ประมวลผล-รวม โดยแบ่งแถวเป็นกลุ่มตามคีย์ ใช้ฟังก์ชันกับแต่ละกลุ่ม แล้วรวมผลลัพธ์เป็นตารางเดียว รูปแบบนี้เป็นพื้นฐานของการสรุปข้อมูลเชิงวิเคราะห์ส่วนใหญ่
import pandas as pd
df = pd.DataFrame({
"dept": ["A", "A", "B", "B", "B"],
"salary": [50, 70, 40, 60, 80],
})groupby พื้นฐาน
df.groupby("col") จะสร้างออบเจ็กต์ที่จัดกลุ่มไว้ การต่อด้วยการรวมข้อมูล เช่น .mean() จะคำนวณหนึ่งค่าต่อกลุ่ม
print(df.groupby("dept")["salary"].mean())
# dept
# A 60.0
# B 60.0การรวมข้อมูลหลายแบบ
เรียกใช้ฟังก์ชันสรุปหลายรายการพร้อมกันด้วย .agg([...]) เพื่อสร้างหนึ่งคอลัมน์ต่อหนึ่งฟังก์ชัน
print(df.groupby("dept")["salary"].agg(["mean", "min", "max", "count"]))พจนานุกรมสำหรับรวมข้อมูลแยกตามคอลัมน์
ส่งพจนานุกรมให้กับ .agg เพื่อใช้ฟังก์ชันที่แตกต่างกันกับแต่ละคอลัมน์
df["bonus"] = [5, 7, 4, 6, 8]
out = df.groupby("dept").agg({"salary": "mean", "bonus": "sum"})
print(out)การรวมข้อมูลแบบตั้งชื่อ
การรวมข้อมูลแบบตั้งชื่อช่วยตั้งชื่อคอลัมน์ผลลัพธ์ให้ชัดเจนโดยใช้รูปแบบไวยากรณ์ของ pd.NamedAgg วิธีนี้ช่วยหลีกเลี่ยงหัวคอลัมน์หลายระดับที่ทำให้สับสน
out = df.groupby("dept").agg(
avg_salary=("salary", "mean"),
total_bonus=("bonus", "sum"),
)
print(out)การจัดกลุ่มด้วยคีย์หลายตัว
ส่งรายการคอลัมน์เพื่อจัดกลุ่มตามคีย์หลายตัวพร้อมกัน ทำให้ได้ผลลัพธ์แบบลำดับชั้น (MultiIndex)
df["level"] = ["jr", "sr", "jr", "sr", "sr"]
print(df.groupby(["dept", "level"])["salary"].mean())transform: ผลลัพธ์รูปร่างเดียวกัน
.transform() จะคืนผลลัพธ์ที่จัดแนวตรงกับแถวต้นฉบับ (ORIGINAL) ไม่ใช่หนึ่งแถวต่อหนึ่งกลุ่ม เหมาะอย่างยิ่งสำหรับนำสถิติของกลุ่มกลับมาเพิ่มเป็นคอลัมน์ใหม่
df["dept_avg"] = df.groupby("dept")["salary"].transform("mean")
print(df[["dept", "salary", "dept_avg"]])transform สำหรับการทำให้เป็นมาตรฐาน
เนื่องจาก transform จะกระจายผลลัพธ์กลับไปยังแต่ละแถว คุณจึงสามารถทำให้ข้อมูลเป็นมาตรฐานภายในแต่ละกลุ่มได้ เช่น ลบค่าเฉลี่ยของกลุ่มออก
df["centered"] = df["salary"] - df.groupby("dept")["salary"].transform("mean")
print(df[["dept", "salary", "centered"]])apply สำหรับตรรกะที่กำหนดเอง
.apply() จะส่งแต่ละกลุ่ม (ในรูป DataFrame ย่อย) ให้กับฟังก์ชันของคุณ ใช้สำหรับตรรกะที่การรวมข้อมูลแบบสำเร็จรูปไม่สามารถแสดงได้ เช่น การคืนค่าแถว N อันดับแรกของแต่ละกลุ่ม
top = df.groupby("dept").apply(lambda g: g.nlargest(1, "salary"))
print(top[["dept", "salary"]])agg กับ transform กับ apply
agg จะลดแต่ละกลุ่มเหลือหนึ่งค่า transform จะคืนหนึ่งค่าต่อแถวต้นฉบับ apply เป็นวิธีที่ยืดหยุ่น (แต่ช้ากว่า) สำหรับกรณีทั่วไป ควรเลือกวิธีที่เฉพาะเจาะจงที่สุดเพื่อให้โค้ดชัดเจนและทำงานได้เร็ว
การยกเลิกการจัดกลุ่มด้วย reset_index
ผลลัพธ์จาก GroupBy จะเก็บคีย์ไว้ในดัชนี เรียกใช้ .reset_index() เพื่อเปลี่ยนคีย์เหล่านั้นกลับเป็นคอลัมน์ปกติ ซึ่งเป็นรูปแบบที่โค้ดขั้นตอนถัดไปส่วนใหญ่คาดหวัง
flat = df.groupby("dept")["salary"].mean().reset_index()
print(flat)
# dept salary
# 0 A 60.0
# 1 B 60.0แบบทดสอบสั้น ๆ
ลองทดสอบความเข้าใจเรื่อง groupby ของคุณ
สรุป
หัวใจสำคัญของ GroupBy:
- แบ่ง-ประมวลผล-รวมผ่าน
df.groupby("col") .agg([...])และการรวมข้อมูลด้วยพจนานุกรมหรือการตั้งชื่อสำหรับสถิติหลายรายการ.transform()คืนผลลัพธ์ที่มีรูปร่างเหมือนข้อมูลต้นฉบับ.apply()สำหรับตรรกะที่กำหนดเองของแต่ละกลุ่ม- ใช้
.reset_index()เสมอเพื่อคลี่คีย์ของกลุ่มกลับเป็นคอลัมน์
คำถามที่พบบ่อย
บทเรียน “GroupBy และการรวมข้อมูล” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “GroupBy และการรวมข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “GroupBy และการรวมข้อมูล”
df.groupby(), agg(), transform(), apply() และการรวมข้อมูลแบบตั้งชื่อด้วย Named Aggregation คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “GroupBy และการรวมข้อมูล” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- GroupBy และการรวมข้อมูล
- ตารางไพวอตและตารางแจกแจงไขว้
- การผสานและการเชื่อมข้อมูลขั้นสูง
- อนุกรมเวลาใน Pandas