Để sắp xếp lại thứ tự các cấp độ (levels) trong MultiIndex, chúng ta sử dụng phương thức MultiIndex.reorder_levels() với tham số order chỉ định thứ tự mới.
Các bước thực hiện
1. Import thư viện
import pandas as pd
2. Tạo dữ liệu và MultiIndex
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 cấp độ
Tham số order=[2, 0, 1] nghĩa là: cấp độ mới 0 = cấp độ cũ 2, cấp độ mới 1 = cấp độ cũ 0, cấp độ mới 2 = cấp độ cũ 1.
print("\nSắp xếp lại cấp độ:\n", multiIndex.reorder_levels(order=[2, 0, 1]))
Ví dụ hoàn chỉnh
import pandas as pd
# Tạo mảng dữ liệu
arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob'], [50, 30, 40, 70]]
# Tạo MultiIndex với tên cấp độ
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('rank', 'student', 'points'))
# Hiển thị MultiIndex gốc
print("MultiIndex gốc:\n", multiIndex)
print("\nCác cấp độ:\n", multiIndex.levels)
# Sắp xếp lại cấp độ: points -> rank -> student
print("\nMultiIndex sau khi sắp xếp lại (order=[2, 0, 1]):\n", multiIndex.reorder_levels(order=[2, 0, 1]))
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]] MultiIndex sau khi sắp xếp lại: MultiIndex([(50, 2, 'Peter'), (30, 4, 'Chris'), (40, 3, 'Andy'), (70, 1, 'Jacob')], names=['points', 'rank', 'student'])
Lưu ý quan trọng
reorder_levels()chỉ thay đổi thứ tự cấp độ, không sắp xếp dữ liệu.- Tham số
orderchấp nhận danh sách chỉ số nguyên (0-based) hoặc tên cấp độ. - Phương thức trả về MultiIndex mới, không sửa đổi đối tượng gốc.