Pandas cung cấp nhiều phương thức để reshape DataFrame: melt(), stack(), unstack(), pivot().
Giải pháp 1: melt() - Wide to Long
Chuyển cột thành hàng (tăng số hàng, giảm số cột).
import pandas as pd
df = pd.DataFrame({'Id': [1,2,3], 'Age': [13,14,13], 'Mark': [80,90,85]})
print("Gốc:\n", df)
print("\nmelt():\n", df.melt())
Gốc: 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
Giải pháp 2: stack() / unstack() - Level index
stack() chuyển cột thành level index nội bộ (tăng chiều index). unstack() làm ngược lại.
print("\nstack():\n", df.stack().to_frame())
print("\nunstack():\n", 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
Id 0 1
1 2
2 3
Age 0 13
1 14
2 13
Mark 0 80
1 90
2 85
Giải pháp 3: pivot() - Long to Wide
Tạo bảng xoay (pivot table) dựa trên cột chỉ định.
print("\npivot(columns='Id'):\n", 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
Tóm tắt:
- melt: Wide → Long (tidy data).
- stack: Cột → Index level (hierarchical).
- unstack: Index level → Cột.
- pivot: Tạo bảng xoay từ dữ liệu long format.