Để sắp xếp MultiIndex tại một cấp độ cụ thể theo thứ tự tăng dần (mặc định), chúng ta sử dụng phương thức MultiIndex.sortlevel() với tham số level chỉ định cấp độ cần sắp xếp.
Các bước thực hiện
1. Import thư viện
import pandas as pd
2. Tạo MultiIndex
arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob']]
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('ranks', 'student'))
3. Sắp xếp tại cấp độ 1 (mặc định tăng dần)
print("\nSắp xếp cấp độ 1 tăng dần:\n", multiIndex.sortlevel(1))
Ví dụ hoàn chỉnh
import pandas as pd
arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob']]
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('ranks', 'student'))
print("MultiIndex gốc:\n", multiIndex)
print("\nCác cấp độ:\n", multiIndex.levels)
# Sắp xếp tại cấp độ 1 (student) tăng dần
print("\nSắp xếp cấp độ 1 tăng dần:\n", multiIndex.sortlevel(1))
Kết quả đầu ra
MultiIndex gốc: MultiIndex([(2, 'Peter'), (4, 'Chris'), (3, 'Andy'), (1, 'Jacob')], names=['ranks', 'student']) Các cấp độ: [[1, 2, 3, 4], ['Andy', 'Chris', 'Jacob', 'Peter']] Sắp xếp cấp độ 1 tăng dần: (MultiIndex([(3, 'Andy'), (4, 'Chris'), (1, 'Jacob'), (2, 'Peter')], names=['ranks', 'student']), array([2, 1, 3, 0], dtype=int64))
Giải thích
- Kết quả sắp xếp theo cấp độ 'student': Andy → Chris → Jacob → Peter (A-Z).
- Trả về tuple: (MultiIndex đã sắp xếp, mảng indexer).
- Mảng indexer
[2, 1, 3, 0]nghĩa: phần tử mới 0 từ cũ 2, phần tử mới 1 từ cũ 1, v.v.
Cú pháp hiện đại (Pandas ≥ 1.1.0)
# Cũ (deprecated)
multiIndex.sortlevel(1)
# Mới (khuyên dùng)
multiIndex.sort_index(level=1)
multiIndex.sort_index(level='student') # dùng tên cấp độ
Cú sách mới nhất quán hơn và hỗ trợ thêm các tham số như ascending, sort_remaining.