0Pricing
Pandas & NumPy Academy · บทเรียน

เมธอด 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  40

MultiIndex ของคอลัมน์จาก 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       3

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

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

  1. รูปแบบแยก-ประมวลผล-รวม
  2. GroupBy ด้วยคีย์เดียวและหลายคีย์
  3. เมธอด agg()
  4. การแปลงและกรองด้วย GroupBy
← กลับไปที่ Pandas & NumPy Academy