Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python - สร้าง Pivot Table หลายคอลัมน์ด้วย pandas.pivot_table

ฟังก์ชัน pandas.pivot_table() สร้างตารางสรุปข้อมูล (Summary Table) แบบ Spreadsheet รองรับหลาย Index Columns และหลาย Value Columns พร้อมฟังก์ชันสรุป (Aggregation Functions) หลากหลาย

ขั้นตอนการทำงาน

1. สร้าง DataFrame ข้อมูลทีม

import pandas as pd

dataFrame = pd.DataFrame({
    'Team ID': {0: 5, 1: 9, 2: 6, 3: 11, 4: 2, 5: 7},
    'Team Name': {0: 'India', 1: 'Australia', 2: 'Bangladesh', 3: 'South Africa', 4: 'Sri Lanka', 5: 'England'},
    'Team Points': {0: 95, 1: 93, 2: 42, 3: 60, 4: 80, 5: 55},
    'Team Rank': {0: 'One', 1: 'Two', 2: 'Six', 3: 'Four', 4: 'Three', 5: 'Five'}
})

2. สร้าง Pivot Table หลาย Index Columns

pivot = pd.pivot_table(
    dataFrame,
    index=["Team ID", "Team Name", "Team Rank"]
)
print(pivot)

โค้ดตัวอย่างสมบูรณ์

import pandas as pd

dataFrame = pd.DataFrame({
    'Team ID': {0: 5, 1: 9, 2: 6, 3: 11, 4: 2, 5: 7},
    'Team Name': {0: 'India', 1: 'Australia', 2: 'Bangladesh', 3: 'South Africa', 4: 'Sri Lanka', 5: 'England'},
    'Team Points': {0: 95, 1: 93, 2: 42, 3: 60, 4: 80, 5: 55},
    'Team Rank': {0: 'One', 1: 'Two', 2: 'Six', 3: 'Four', 4: 'Three', 5: 'Five'}
})
print("DataFrame:\n", dataFrame)

# Pivot Table หลาย index columns
pivot = pd.pivot_table(dataFrame, index=["Team ID", "Team Name", "Team Rank"])
print("\nPivot Table:\n", pivot)

ผลลัพธ์

Pivot Table:
                         Team Points
Team ID Team Name    Team Rank
2       Sri Lanka    Three              80
5       India        One                95
6       Bangladesh   Six                42
7       England      Five               55
9       Australia    Two                93
11      South Africa Four               60

พารามิเตอร์สำคัญของ pivot_table

พารามิเตอร์ค่าเริ่มต้นคำอธิบาย
valuesทั้งหมด numericคอลัมน์ที่จะสรุป (aggregate)
indexNoneคอลัมน์เป็น Row labels (รองรับ list)
columnsNoneคอลัมน์เป็น Column labels (รองรับ list)
aggfunc'mean'ฟังก์ชันสรุป: 'mean', 'sum', 'count', 'min', 'max', 'std', list, dict
fill_valueNoneค่าแทน NaN
marginsFalseTrue = เพิ่มแถว/คอลัมน์ All (Grand Total)
margins_name'All'ชื่อแถว/คอลัมน์รวม
dropnaTrueTrue = ลบคอลัมน์ที่ทั้งหมดเป็น NaN

ตัวอย่างขั้นสูง

# หลาย values, หลาย aggfunc
pivot = pd.pivot_table(
    df,
    values=['Sales', 'Profit'],
    index=['Region', 'Product'],
    columns='Year',
    aggfunc={'Sales': 'sum', 'Profit': ['mean', 'sum']},
    fill_value=0,
    margins=True
)

# ใช้ custom function
pivot = pd.pivot_table(
    df,
    values='Score',
    index='Student',
    columns='Subject',
    aggfunc=lambda x: x.max() - x.min()  # Range
)

Pivot Table vs Groupby

  • pivot_table: Output เป็น DataFrame/MultiIndex สวยง่าย พร้อม columns hierarchy
  • groupby: ยืดหยุ่นกว่า รองรับ complex aggregations, transform, filter
  • พื้นฐาน: pivot_table ใช้ groupby ด้านใน