สามารถเปลี่ยนรูปทรง (reshape) DataFrame ได้หลายวิธี ได้แก่ melt(), stack(), unstack(), และ pivot()
วิธีที่ 1: ใช้ melt() - แปลงจาก wide เป็น long format
- สร้าง DataFrame
- ใช้
df.melt()แปลงคอลัมน์เป็นแถว
ตัวอย่าง
import pandas as pd
df = pd.DataFrame({'Id': [1, 2, 3], 'Age': [13, 14, 13], 'Mark': [80, 90, 85]})
print("DataFrame ต้นฉบับ:\n", df)
print("\nหลัง melt():")
print(df.melt())
ผลลัพธ์
DataFrame ต้นฉบับ:
Id Age Mark
0 1 13 80
1 2 14 90
2 3 13 85
หลัง melt():
variable value
0 Id 1
1 Id 2
2 Id 3
3 Age 13
4 Age 14
5 Age 13
6 Mark 80
7 Mark 90
8 Mark 85
วิธีที่ 2: ใช้ stack() และ unstack() - เปลี่ยนระดับของ index
- ใช้
df.stack()เพิ่มระดับ index (wide -> long) - ใช้
df.unstack()ลดระดับ index (long -> wide)
ตัวอย่าง
import pandas as pd
df = pd.DataFrame({'Id': [1, 2, 3], 'Age': [13, 14, 13], 'Mark': [80, 90, 85]})
print("DataFrame ต้นฉบับ:\n", df)
print("\nหลัง stack():")
print(df.stack().to_frame())
print("\nหลัง unstack():")
print(df.unstack().to_frame())
ผลลัพธ์
หลัง stack():
0
0 Id 1
Age 13
Mark 80
1 Id 2
Age 14
Mark 90
2 Id 3
Age 13
Mark 85
หลัง unstack():
0 1 2
Id 0 1 2 3
Age 0 13 14 13
Mark 0 80 90 85
วิธีที่ 3: ใช้ pivot() - สร้างตารางสรุปจากคอลัมน์
- ใช้
df.pivot(columns='Id')เปลี่ยนรูปทรงตามคอลัมน์ Id
ตัวอย่าง
import pandas as pd
df = pd.DataFrame({'Id': [1, 2, 3], 'Age': [13, 14, 13], 'Mark': [80, 90, 85]})
print("DataFrame ต้นฉบับ:\n", df)
print("\nหลัง pivot(columns='Id'):")
print(df.pivot(columns='Id'))
ผลลัพธ์
หลัง pivot(columns='Id'):
Age Mark
Id 1 2 3 1 2 3
0 13.0 NaN NaN 80.0 NaN NaN
1 NaN 14.0 NaN NaN 90.0 NaN
2 NaN NaN 13.0 NaN NaN 85.0
สรุปการใช้งาน:
- melt(): Wide -> Long (คอลัมน์กลายเป็นแถว)
- stack(): คอลัมน์กลายเป็น inner index level
- unstack(): Index level กลายเป็นคอลัมน์ (กลับของ stack)
- pivot(): สร้างตาราง pivot จากคอลัมน์ index/columns/values ที่กำหนด