เมธอด agg()
ใช้ฟังก์ชันการรวมค่าหลายรายการพร้อมกันด้วย agg() และส่งพจนานุกรมเพื่อคำนวณสถิติที่แตกต่างกันสำหรับแต่ละคอลัมน์
เมธอด agg() เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงใช้ agg()
การเรียกใช้ sum() หรือ mean() โดยตรงกับออบเจ็กต์ GroupBy จะให้สถิติเพียงรายการเดียว แต่การวิเคราะห์จริงมักต้องการ สถิติหลายรายการพร้อมกัน เช่น รายได้รวม ขนาดคำสั่งซื้อเฉลี่ย และจำนวนคำสั่งซื้อต่อภูมิภาค เมธอด agg() ซึ่งย่อมาจาก aggregate ช่วยให้คุณคำนวณค่าทั้งหมดนี้ได้ในการเรียกใช้ที่มีประสิทธิภาพเพียงครั้งเดียว แทนการเรียกใช้การรวมค่าแยกกันแล้วนำผลลัพธ์มารวม
การส่งลิสต์ชื่อฟังก์ชัน
การใช้ agg() ที่ง่ายที่สุดคือส่งลิสต์สตริงชื่อฟังก์ชัน Pandas จะใช้ทุกฟังก์ชันกับคอลัมน์ที่เลือก และคืนค่าเป็น DataFrame ที่แต่ละคอลัมน์สอดคล้องกับหนึ่งฟังก์ชัน วิธีนี้ใช้ได้กับชื่อการรวมค่าที่มีมาให้แล้วทุกชื่อ เช่น 'sum', 'mean', 'min', 'max', 'count', 'std', 'median' และอื่น ๆ
import pandas as pd
df = pd.DataFrame({
'region': ['East', 'West', 'East', 'West', 'East', 'West'],
'revenue': [200, 340, 150, 290, 310, 410],
'units': [20, 35, 15, 30, 28, 40]
})
result = df.groupby('region')['revenue'].agg(['sum', 'mean', 'count', 'max'])
print(result)
# sum mean count max
# region
# East 660 220.000000 3 310
# West 1040 346.666667 3 410การเปลี่ยนชื่อคอลัมน์ผลลัพธ์ด้วยการรวมค่าแบบตั้งชื่อ
เมื่อคุณส่งลิสต์สตริง คอลัมน์ผลลัพธ์จะใช้ชื่อของฟังก์ชันเอง เช่น 'sum' และ 'mean' เพื่อให้ผลลัพธ์อ่านง่ายขึ้น ให้ใช้ การรวมค่าแบบตั้งชื่อ โดยส่งอาร์กิวเมนต์คีย์เวิร์ดที่คีย์เป็นชื่อคอลัมน์ที่คุณต้องการ และค่าเป็นทูเพิลของ (column, function) นี่เป็นแนวทางสมัยใหม่ของ Pandas และทำให้โค้ดอธิบายตัวเองได้
result = df.groupby('region').agg(
total_revenue=('revenue', 'sum'),
avg_revenue=('revenue', 'mean'),
order_count=('revenue', 'count'),
max_order=('revenue', 'max')
)
print(result)
# total_revenue avg_revenue order_count max_order
# region
# East 660 220.000000 3 310
# West 1040 346.666667 3 410การใช้ฟังก์ชันต่างกันกับคอลัมน์ต่างกัน
คุณสามารถส่ง พจนานุกรม ให้กับ agg() โดยแต่ละคีย์เป็นชื่อคอลัมน์ และแต่ละค่าเป็นฟังก์ชันหรือลิสต์ฟังก์ชันที่จะใช้กับคอลัมน์นั้น วิธีนี้ช่วยให้คุณคำนวณ sum กับ revenue แต่คำนวณ mean กับ units ได้ในการเรียกใช้ GroupBy เพียงครั้งเดียว
result = df.groupby('region').agg({
'revenue': ['sum', 'mean'],
'units': ['sum', 'max']
})
print(result)
# revenue units
# sum mean sum max
# region
# East 660 220.000000 63 28
# West 1040 346.666667 105 40MultiIndex ของคอลัมน์จาก dict agg()
เมื่อคุณส่งพจนานุกรมที่มีหลายฟังก์ชันต่อคอลัมน์ ผลลัพธ์จะมี MultiIndex บนคอลัมน์ ระดับแรกคือชื่อคอลัมน์เดิม และระดับที่สองคือชื่อฟังก์ชัน คุณสามารถทำให้ชื่อคอลัมน์เหล่านี้เป็นสตริงเดียวด้วยลิสต์คอมพรีเฮนชัน เพื่อให้ใช้งานผลลัพธ์ในขั้นตอนต่อไปได้ง่ายขึ้น
result = df.groupby('region').agg({'revenue': ['sum', 'mean'], 'units': 'sum'})
# Flatten MultiIndex columns
result.columns = ['_'.join(c).strip() for c in result.columns]
print(result.columns.tolist())
# ['revenue_sum', 'revenue_mean', 'units_sum']การใช้ฟังก์ชันแบบกำหนดเองใน agg()
นอกจากชื่อฟังก์ชันในรูปสตริงแล้ว คุณยังสามารถส่งออบเจ็กต์ที่เรียกใช้ได้ของ Python ใด ๆ ให้กับ agg() ฟังก์ชันจะได้รับ Series ซึ่งเป็นค่าของคอลัมน์นั้นในกลุ่มหนึ่งกลุ่ม และต้องคืนค่าสเกลาร์ คุณสามารถส่งฟังก์ชัน lambda หรือฟังก์ชันที่ตั้งชื่อไว้ได้ ฟังก์ชันแบบกำหนดเองมีความยืดหยุ่นมากกว่า แต่ช้ากว่าฟังก์ชันที่มีชื่อมาให้แล้ว เพราะไม่สามารถใช้การปรับประสิทธิภาพระดับ C ได้
def revenue_range(s):
return s.max() - s.min()
result = df.groupby('region')['revenue'].agg(['sum', revenue_range])
print(result)
# sum revenue_range
# region
# East 660 160
# West 1040 120การรวมค่าแบบตั้งชื่อด้วยฟังก์ชันแบบกำหนดเอง
ไวยากรณ์การรวมแบบตั้งชื่อใช้ได้กับฟังก์ชันที่เรียกใช้งานได้ด้วย ไม่ได้จำกัดเฉพาะชื่อที่เป็นสตริง เพียงส่งทูเพิลของ (column, function) เป็นค่าของอาร์กิวเมนต์แบบคีย์เวิร์ด โดยฟังก์ชันนั้นต้องเป็นฟังก์ชันใดก็ได้ที่รับ Series และคืนค่าเดี่ยว วิธีนี้ช่วยให้โค้ดอ่านง่าย แม้จะใช้ฟังก์ชันในตัวร่วมกับตรรกะแบบกำหนดเอง
result = df.groupby('region').agg(
total=('revenue', 'sum'),
spread=('revenue', lambda s: s.max() - s.min()),
top_units=('units', 'max')
)
print(result)
# total spread top_units
# region
# East 660 160 28
# West 1040 120 40การรวมค่าโดยไม่เลือกคอลัมน์
เมื่อเรียก agg() กับ GroupBy โดยไม่เลือกคอลัมน์ใดเป็นพิเศษ Pandas จะใช้ฟังก์ชันกับคอลัมน์ตัวเลขทุกคอลัมน์ใน DataFrame วิธีนี้เป็นทางลัดสำหรับดูสรุปของคอลัมน์ตัวเลขทั้งหมดในครั้งเดียว โปรดทราบว่าโดยทั่วไปคอลัมน์ที่มีชนิดข้อมูลไม่ใช่ตัวเลขจะถูกข้ามไปโดยไม่มีการแจ้งเตือนในการรวมค่าส่วนใหญ่
# Aggregate all numeric columns in one call
result = df.groupby('region').agg(['sum', 'mean'])
print(result)
# revenue units
# sum mean sum mean
# region
# East 660 220.000000 63 21.00
# West 1040 346.666667 105 35.00การใช้ agg() ร่วมกับ reset_index()
หลังจากใช้ agg() คอลัมน์ที่ใช้จัดกลุ่มจะกลายเป็นดัชนี รูปแบบที่ใช้กันทั่วไปคือเรียก reset_index() ทันที เพื่อให้ได้ DataFrame แบบแบนที่คีย์ของกลุ่มกลับมาเป็นคอลัมน์ปกติ จากนั้นคุณสามารถเปลี่ยนชื่อ เรียงลำดับ และกรองผลลัพธ์ได้เหมือนกับ DataFrame อื่น ๆ ทำให้ส่งต่อไปยังขั้นตอนถัดไปหรือส่งออกได้ง่าย
summary = (
df.groupby('region')
.agg(total=('revenue', 'sum'), orders=('revenue', 'count'))
.reset_index()
.sort_values('total', ascending=False)
)
print(summary)
# region total orders
# 1 West 1040 3
# 0 East 660 3agg() เทียบกับ transform() และ apply()
สิ่งสำคัญคือต้องแยกความแตกต่างระหว่างเมธอดของ GroupBy ทั้งสามแบบ: agg() ลดรูปแต่ละกลุ่มให้เหลือค่าเดี่ยว ทำให้ผลลัพธ์มีจำนวนน้อยกว่าแถวเดิม transform() คืนอาร์เรย์ที่มี รูปร่างเหมือนเดิม กับข้อมูลนำเข้า จึงสามารถเพิ่มสถิติระดับกลุ่มเป็นคอลัมน์ใหม่ได้ ส่วน apply() ยืดหยุ่นที่สุด แต่ก็ช้าที่สุด และจะกล่าวถึงในบทเรียนถัดไป
# agg: one row per group
print(df.groupby('region')['revenue'].agg('mean'))
# region
# East 220.0
# West 346.7
# transform: one row per original row (group mean broadcast back)
df['group_mean'] = df.groupby('region')['revenue'].transform('mean')
print(df[['region', 'revenue', 'group_mean']].head())ตัวอย่างเชิงปฏิบัติ: สรุปยอดขาย
ต่อไปนี้คือตัวอย่างตั้งแต่ต้นจนจบที่ใกล้เคียงกับการใช้งานจริง: คำนวณตารางสรุปยอดขายที่ประกอบด้วยรายได้รวม มูลค่าเฉลี่ยต่อคำสั่งซื้อ จำนวนคำสั่งซื้อ และช่วงรายได้ของแต่ละภูมิภาค โดยใช้ชื่อคอลัมน์ที่อ่านง่ายและเรียงตามรายได้รวมจากมากไปน้อย รูปแบบนี้นำไปใช้ได้โดยตรงในขั้นตอนการวิเคราะห์ผลิตภัณฑ์ การเงิน และการตลาด
summary = (
df.groupby('region')
.agg(
total_revenue=('revenue', 'sum'),
avg_order=('revenue', 'mean'),
num_orders=('revenue', 'count'),
revenue_range=('revenue', lambda s: s.max() - s.min())
)
.reset_index()
.sort_values('total_revenue', ascending=False)
.round(2)
)
print(summary)ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับเมธอด agg() จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้วิธีคำนวณการรวมค่าหลายแบบพร้อมกันด้วย agg() วิธีใช้การรวมค่าแบบตั้งชื่อเพื่อให้ได้ชื่อคอลัมน์ที่อ่านง่าย และวิธีใช้ฟังก์ชันที่แตกต่างกันกับคอลัมน์ที่แตกต่างกันด้วยพจนานุกรม บทถัดไปเราจะสำรวจ transform() และ filter() ซึ่งใช้เพิ่มข้อมูลระดับกลุ่มกลับเข้าไปใน DataFrame เดิม
คำถามที่พบบ่อย
บทเรียน “เมธอด agg()” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เมธอด agg()” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เมธอด agg()”
ใช้ฟังก์ชันการรวมค่าหลายรายการพร้อมกันด้วย agg() และส่งพจนานุกรมเพื่อคำนวณสถิติที่แตกต่างกันสำหรับแต่ละคอลัมน์ คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “เมธอด agg()” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม
ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ