ฟังก์ชัน 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) |
index | None | คอลัมน์เป็น Row labels (รองรับ list) |
columns | None | คอลัมน์เป็น Column labels (รองรับ list) |
aggfunc | 'mean' | ฟังก์ชันสรุป: 'mean', 'sum', 'count', 'min', 'max', 'std', list, dict |
fill_value | None | ค่าแทน NaN |
margins | False | True = เพิ่มแถว/คอลัมน์ All (Grand Total) |
margins_name | 'All' | ชื่อแถว/คอลัมน์รวม |
dropna | True | True = ลบคอลัมน์ที่ทั้งหมดเป็น 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ด้านใน