Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chuyển đổi hình dạng DataFrame (reshape) bằng melt, stack, unstack, pivot Python

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.