pivot_table: ตารางไขว้
สร้างตารางสรุปแบบไพวอตสไตล์ Excel ด้วย pd.pivot_table โดยกำหนด index, columns, values และ aggfunc
pivot_table: ตารางไขว้ เป็นบทเรียน Pandas & NumPy Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Pandas & NumPy Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
ตารางสรุปแบบหมุนคืออะไร
ตารางสรุปแบบหมุน คือการจัดตารางไขว้ที่สรุปข้อมูลตามมิติแบบจัดหมวดหมู่สองมิติ โดยมิติหนึ่งใช้สร้างแถว อีกมิติหนึ่งใช้สร้างคอลัมน์ และแต่ละเซลล์จะมีค่าที่ผ่านการรวมแล้ว หากคุณเคยสร้างตารางสรุปแบบหมุนใน Excel มาก่อน ก็จะเข้าใจแนวคิดนี้ได้ทันที Pandas มี pd.pivot_table() (รวมถึงเมธอดเวอร์ชันของ DataFrame) สำหรับสร้างข้อมูลสรุปเหล่านี้ด้วย Python ทั้งหมด
การเรียกใช้ pivot_table พื้นฐาน
พารามิเตอร์หลักสี่รายการของ pd.pivot_table() ได้แก่ values (คอลัมน์ที่จะนำมารวมค่า), index (คอลัมน์ที่จะกลายเป็นแถว), columns (คอลัมน์ที่จะกลายเป็นคอลัมน์) และ aggfunc (ฟังก์ชันการรวมค่า ซึ่งค่าเริ่มต้นคือ 'mean') ผลลัพธ์คือ DataFrame ที่แต่ละเซลล์มีค่าที่รวมแล้วสำหรับชุดแถวและคอลัมน์นั้น
import pandas as pd
df = pd.DataFrame({
'region': ['East', 'West', 'East', 'West', 'East', 'West'],
'product': ['A', 'A', 'B', 'B', 'A', 'B'],
'revenue': [200, 340, 150, 290, 310, 410]
})
table = pd.pivot_table(df,
values='revenue',
index='region',
columns='product',
aggfunc='sum')
print(table)
# product A B
# region
# East 510 150
# West 340 700การเลือก aggfunc
พารามิเตอร์ aggfunc รับชื่อสตริงของฟังก์ชันการรวมค่าจาก NumPy/Pandas ฟังก์ชันที่เรียกใช้ได้ หรือรายการของฟังก์ชันที่เรียกใช้ได้ ตัวเลือกที่ใช้บ่อย ได้แก่ 'sum' สำหรับผลรวม 'mean' สำหรับค่าเฉลี่ย 'count' สำหรับความถี่ และ 'min'/'max' สำหรับค่าต่ำสุดและสูงสุด เมื่อส่งรายการเข้าไป การรวมค่าแต่ละแบบจะมีระดับของตนเองในคอลัมน์ MultiIndex
# Using mean (default)
table_mean = pd.pivot_table(df, values='revenue',
index='region', columns='product',
aggfunc='mean')
print(table_mean.round(1))
# product A B
# region
# East 255.0 150.0
# West 340.0 350.0
# Using count
table_count = pd.pivot_table(df, values='revenue',
index='region', columns='product',
aggfunc='count')
print(table_count)การจัดการเซลล์ที่ไม่มีข้อมูลด้วย fill_value
เมื่อชุดป้ายกำกับแถวและคอลัมน์ไม่มีข้อมูล เซลล์นั้นจะมีค่า NaN ตามค่าเริ่มต้น ให้ส่ง fill_value เพื่อแทนที่เซลล์ว่างเหล่านั้นด้วยค่าเริ่มต้นที่มีความหมาย เช่น 0 สำหรับจำนวนหรือรายได้ วิธีนี้ทำให้ตารางอ่านง่ายขึ้น และป้องกันไม่ให้การคำนวณในขั้นตอนถัดไปสร้างผลลัพธ์เป็น NaN โดยไม่แจ้งให้ทราบ
df2 = pd.DataFrame({
'region': ['East', 'West', 'East'],
'product': ['A', 'A', 'B'],
'revenue': [200, 340, 150]
})
# West-B combination has no data -> NaN by default
table = pd.pivot_table(df2, values='revenue', index='region',
columns='product', aggfunc='sum', fill_value=0)
print(table)
# product A B
# region
# East 200 150
# West 340 0 <- filled with 0 instead of NaNการเพิ่มผลรวมย่อยด้วย margins
ส่ง margins=True เพื่อเพิ่มผลรวมของแถวและคอลัมน์ลงในตารางสรุปแบบหมุน Pandas จะเพิ่มแถว 'All' ที่ด้านล่างและคอลัมน์ 'All' ทางด้านขวา ซึ่งประกอบด้วยค่าที่รวมจากทุกหมวดหมู่ คุณสามารถเปลี่ยนชื่อป้ายกำกับผลรวมได้ด้วย margins_name วิธีนี้สอดคล้องกับแถว 'Grand Total' ในตารางสรุปแบบหมุนของ Excel
table = pd.pivot_table(df, values='revenue', index='region',
columns='product', aggfunc='sum',
fill_value=0, margins=True, margins_name='Total')
print(table)
# product A B Total
# region
# East 510 150 660
# West 340 700 1040
# Total 850 850 1700ค่าหลายรายการใน pivot_table
พารามิเตอร์ values สามารถรับรายการชื่อคอลัมน์เพื่อรวมหลายตัวชี้วัดพร้อมกันได้ ผลลัพธ์จะมีคอลัมน์ MultiIndex โดยระดับนอกคือคอลัมน์ค่าที่นำมารวม และระดับในคือหมวดหมู่ วิธีนี้ช่วยให้คุณสร้างตารางสรุปที่ครอบคลุมได้ด้วยการเรียกใช้เพียงครั้งเดียว แทนการสร้างและรวมตารางสรุปแบบหมุนหลายตารางแยกกัน
df['units'] = [10, 15, 8, 12, 14, 18]
table = pd.pivot_table(df,
values=['revenue', 'units'],
index='region',
columns='product',
aggfunc='sum')
print(table)
# Columns: (revenue, A), (revenue, B), (units, A), (units, B)
print(table.columns.tolist())ดัชนีและคอลัมน์แบบลำดับชั้น
เมื่อส่งรายการให้กับ index หรือ columns ตารางสรุปแบบหมุนจะมี MultiIndex บนแกนที่เกี่ยวข้อง วิธีนี้ช่วยให้สร้างข้อมูลสรุปที่ละเอียดขึ้นได้ เช่น แจกแจงรายได้ตามภูมิภาค และไตรมาสในแถว และตามสินค้าในคอลัมน์ เข้าถึงระดับย่อยด้วย .loc และทูเพิลของดัชนีได้ตามปกติ
df['quarter'] = ['Q1', 'Q1', 'Q2', 'Q2', 'Q1', 'Q2']
table = pd.pivot_table(df, values='revenue',
index=['region', 'quarter'],
columns='product',
aggfunc='sum', fill_value=0)
print(table)
# product A B
# region quarter
# East Q1 510 0
# Q2 0 150
# West Q1 340 0
# Q2 0 700การทำให้ผลลัพธ์แบนราบ
หลังจากสร้างตารางสรุปแบบหมุนแล้ว ดัชนีจะเป็นคอลัมน์ที่ใช้จัดกลุ่ม และคอลัมน์ MultiIndex (เมื่อใช้ค่าหลายรายการ) อาจจัดการได้ยาก รูปแบบการปรับแต่งที่ใช้กันทั่วไปคือเรียก reset_index() เพื่อทำให้ดัชนีแถวแบนราบ จากนั้นรวมคอลัมน์ MultiIndex ให้เหลือระดับเดียวด้วยการเชื่อมระดับต่าง ๆ โดยใช้ขีดล่างและการสร้างรายการแบบย่อ
table = pd.pivot_table(df, values=['revenue', 'units'],
index='region', columns='product', aggfunc='sum')
# Flatten MultiIndex columns
table.columns = ['_'.join(str(c) for c in col) for col in table.columns]
table = table.reset_index()
print(table.columns.tolist())
# ['region', 'revenue_A', 'revenue_B', 'units_A', 'units_B']pivot_table เทียบกับ groupby().agg()
ทั้ง pivot_table และ groupby().agg() สร้างสถิติสรุปได้ ความแตกต่างอยู่ที่รูปแบบผลลัพธ์: groupby().agg() คืนค่า DataFrame รูปแบบยาว ที่มีหนึ่งแถวต่อชุดกลุ่ม ส่วน pivot_table คืนตาราง รูปแบบกว้าง ซึ่งมิติหนึ่งจะกลายเป็นคอลัมน์ สำหรับแดชบอร์ดและรายงาน รูปแบบกว้างของตารางสรุปแบบหมุนมักอ่านง่ายกว่า แต่สำหรับการเรียนรู้ของเครื่องหรือการวิเคราะห์ทางสถิติในขั้นต่อไป มักนิยมใช้รูปแบบยาว
# Long format (groupby)
long = df.groupby(['region', 'product'])['revenue'].sum().reset_index()
print(long)
# region product revenue
# East A 510
# East B 150
# Wide format (pivot_table)
wide = pd.pivot_table(df, 'revenue', 'region', 'product', 'sum', fill_value=0)
print(wide)
# product A B
# region
# East 510 150การเรียงลำดับและจัดรูปแบบตารางสรุปแบบหมุน
ตารางสรุปแบบหมุนเป็น DataFrame ปกติ ดังนั้นคุณจึงเรียงลำดับ คำนวณคอลัมน์ที่ได้มา และจัดรูปแบบได้เช่นเดียวกับ DataFrame อื่น ๆ ของ Pandas ตัวอย่างเช่น เรียงตามคอลัมน์สินค้าที่ระบุจากมากไปน้อยเพื่อจัดอันดับภูมิภาคตามผลการดำเนินงานของสินค้านั้น หรือเพิ่มคอลัมน์เปอร์เซ็นต์ด้วยการหารแต่ละเซลล์ด้วยผลรวมของแถว
table = pd.pivot_table(df, 'revenue', 'region', 'product', 'sum', fill_value=0)
# Sort by product A revenue descending
table_sorted = table.sort_values('A', ascending=False)
print(table_sorted)
# Add percentage of row total
table['A_pct'] = (table['A'] / table.sum(axis=1) * 100).round(1)
print(table)การใช้งานจริง: ตารางแดชบอร์ดยอดขาย
ตารางสรุปแบบหมุนเป็นเครื่องมือหลักสำหรับสร้าง รายงานสำหรับผู้บริหารและแดชบอร์ด กระบวนการทำงานทั่วไปมีดังนี้: โหลดข้อมูลธุรกรรมดิบ สร้างตารางสรุปแบบหมุนโดยใช้เดือนเป็นคอลัมน์และหมวดหมู่สินค้าเป็นแถว เพิ่มผลรวม แล้วส่งออกไปยัง Excel กระบวนการทั้งหมดตั้งแต่ข้อมูลดิบจนถึงตารางที่พร้อมนำเสนอในห้องประชุมผู้บริหารใช้การเรียก Pandas เพียงไม่กี่ครั้ง
# Simulated monthly product revenue pivot
result = pd.pivot_table(
df,
values='revenue',
index='product',
columns='region',
aggfunc='sum',
fill_value=0,
margins=True,
margins_name='Grand Total'
)
print(result)
# Export to Excel
# result.to_excel('sales_pivot.xlsx')ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับ pd.pivot_table จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า pd.pivot_table() สร้าง ข้อมูลสรุปแบบตารางไขว้ โดยให้มิติหนึ่งเป็นแถวและอีกมิติหนึ่งเป็นคอลัมน์; fill_value ใช้จัดการเซลล์ที่ไม่มีข้อมูล และ margins=True ใช้เพิ่มผลรวม; คุณสามารถรวม ค่าหลายรายการ ได้พร้อมกัน; และตารางสรุปแบบหมุนให้ผลลัพธ์รูปแบบกว้างที่เหมาะสำหรับรายงาน บทถัดไปเราจะสำรวจการดำเนินการย้อนกลับ นั่นคือ melt() สำหรับแปลงข้อมูลรูปแบบกว้างกลับเป็นรูปแบบยาว
เรียนรู้ Python ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “pivot_table: ตารางไขว้” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “pivot_table: ตารางไขว้” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Pandas & NumPy Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Pandas & NumPy Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “pivot_table: ตารางไขว้”
สร้างตารางสรุปแบบไพวอตสไตล์ Excel ด้วย pd.pivot_table โดยกำหนด index, columns, values และ aggfunc คุณปฏิบัติ Pandas & NumPy Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Pandas & NumPy Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Pandas & NumPy Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “pivot_table: ตารางไขว้” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Pandas & NumPy Academy นี้ได้ไหม
ได้ บทเรียน Pandas & NumPy Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- pivot_table: ตารางไขว้
- melt: จากรูปแบบกว้างเป็นรูปแบบยาว
- stack และ unstack กับ MultiIndex
- crosstab สำหรับตารางความถี่