Để sắp xếp lại các cấp độ trong MultiIndex sử dụng tên cấp độ thay vì chỉ số, chúng ta truyền danh sách tên cấp độ cho tham số order của phương thức MultiIndex.reorder_levels().
Các bước thực hiện
1. Import thư viện
import pandas as pd
2. Tạo MultiIndex có tên cấp độ
arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob'], [50, 30, 40, 70]]
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('rank', 'student', 'points'))
3. Sắp xếp lại bằng tên cấp độ
print("\nSắp xếp lại bằng tên cấp độ:\n", multiIndex.reorder_levels(order=['student', 'rank', 'points']))
Ví dụ hoàn chỉnh (kèm so sánh swaplevel)
import pandas as pd
arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob'], [50, 30, 40, 70]]
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('rank', 'student', 'points'))
print("MultiIndex gốc:\n", multiIndex)
print("\nCác cấp độ:\n", multiIndex.levels)
# swaplevel() - chỉ đổi chỗ 2 cấp độ
print("\nSwap level 0 và 2:\n", multiIndex.swaplevel(0, 2))
# reorder_levels() với tên cấp độ - linh hoạt hơn
print("\nReorder bằng tên ['student', 'rank', 'points']:\n", multiIndex.reorder_levels(order=['student', 'rank', 'points']))
Kết quả đầu ra
MultiIndex gốc:
MultiIndex([(2, 'Peter', 50), (4, 'Chris', 30), (3, 'Andy', 40), (1, 'Jacob', 70)], names=['rank', 'student', 'points'])
Các cấp độ:
[[1, 2, 3, 4], ['Andy', 'Chris', 'Jacob', 'Peter'], [30, 40, 50, 70]]
Swap level 0 và 2:
MultiIndex([('Peter', 2, 50), ('Chris', 4, 30), ('Andy', 3, 40), ('Jacob', 1, 70)], names=['student', 'rank', 'points'])
Reorder bằng tên ['student', 'rank', 'points']:
MultiIndex([('Peter', 2, 50), ('Chris', 4, 30), ('Andy', 3, 40), ('Jacob', 1, 70)], names=['student', 'rank', 'points'])
So sánh swaplevel() vs reorder_levels()
| Phương thức | Đặc điểm |
|---|---|
swaplevel(i, j) | Chỉ hoán đổi 2 cấp độ, đơn giản, nhanh |
reorder_levels(order=[...]) | Sắp xếp tùy ý nhiều cấp độ, chấp nhận tên hoặc chỉ số |
Sử dụng reorder_levels() khi cần sắp xếp phức tạp hơn 2 cấp độ.