Để sắp xếp MultiIndex tại một cấp độ cụ thể theo thứ tự giảm dần (descending), chúng ta sử dụng phương thức MultiIndex.sortlevel() với tham số ascending=False.
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 giảm dần
print("\nSắp xếp cấp độ 1 giảm dần:\n", multiIndex.sortlevel(1, ascending=False))
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) giảm dần
print("\nSắp xếp cấp độ 1 giảm dần:\n", multiIndex.sortlevel(1, ascending=False))
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 giảm dần: (MultiIndex([(2, 'Peter'), (1, 'Jacob'), (4, 'Chris'), (3, 'Andy')], names=['ranks', 'student']), array([0, 3, 1, 2], dtype=int64))
Giải thích kết quả
Phương thức sortlevel() trả về một tuple gồm 2 phần tử:
- MultiIndex mới đã sắp xếp: [('Peter'), ('Jacob'), ('Chris'), ('Andy')] - theo thứ tự Z-A.
- Mảng chỉ số (indexer):
array([0, 3, 1, 2])- vị trí cũ của các phần tử trong MultiIndex mới.
Mảng chỉ số hữu ích để sắp xếp đồng bộ DataFrame/Series cùng index.
Lưu ý
sortlevel()đã được deprecated kể từ Pandas 1.1.0, thay bằngsort_index(level=...).- Cú pháp mới:
multiIndex.sort_index(level=1, ascending=False).