0Pricing
Learn AI with Python · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. GroupBy และการรวมข้อมูล
  2. ตารางไพวอตและตารางแจกแจงไขว้
  3. การผสานและการเชื่อมข้อมูลขั้นสูง
  4. อนุกรมเวลาใน Pandas
← กลับไปที่ Learn AI with Python