Để thiết lập giá trị mới cho một cấp độ đơn lẻ trong MultiIndex bằng cách chỉ định tên cấp độ, chúng ta dùng phương thức MultiIndex.set_levels() với tham số level.
Các bước thực hiện
1. Import thư viện
import pandas as pd
2. Tạo MultiIndex
arrays = [[1, 2, 3, 4], ['John', 'Tim', 'Jacob', 'Chris']]
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('ranks', 'student'))
3. Đặt cấp độ mới cho 'student'
Tham số level='student' chỉ định cấp độ cần thay đổi:
print("\nĐặt cấp độ mới cho 'student':\n", multiIndex.set_levels(['Emma', 'Angelina', 'Scarlett', 'Jeni'], level='student'))
Ví dụ hoàn chỉnh
import pandas as pd
arrays = [[1, 2, 3, 4], ['John', 'Tim', 'Jacob', 'Chris']]
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('ranks', 'student'))
print("MultiIndex gốc:\n", multiIndex)
print("\nCác cấp độ gốc:\n", multiIndex.levels)
# Đặt cấp độ mới cho 'student' (theo tên)
print("\nMultiIndex sau set_levels level='student':\n", multiIndex.set_levels(['Emma', 'Angelina', 'Scarlett', 'Jeni'], level='student'))
Kết quả đầu ra
MultiIndex gốc: MultiIndex([(1, 'John'), (2, 'Tim'), (3, 'Jacob'), (4, 'Chris')], names=['ranks', 'student']) Các cấp độ gốc: [[1, 2, 3, 4], ['Chris', 'Jacob', 'John', 'Tim']] MultiIndex sau set_levels level='student': MultiIndex([(1, 'Scarlett'), (2, 'Jeni'), (3, 'Angelina'), (4, 'Emma')], names=['ranks', 'student'])
Giải thích quan trọng
Lưu ý: Kết quả có vẻ "đảo lộn" vì set_levels() thay thế các giá trị duy nhất (unique values) của cấp độ (levels), không phải giá trị tại từng vị trí (codes).
- Cấp độ 'student' gốc có levels:
['Chris', 'Jacob', 'John', 'Tim'](đã sắp xếp). - Codes gốc:
[2, 4, 1, 0]→ John(2), Tim(4), Jacob(1), Chris(0). - Levels mới:
['Emma', 'Angelina', 'Scarlett', 'Jeni']. - Codes giữ nguyên → John→Scarlett(2), Tim→Jeni(4→out of bounds?)...
Cảnh báo: Số lượng levels mới phải ≥ max(codes) + 1,否则 sẽ lỗi hoặc kết quả không như mong đợi. Để thay đổi giá trị thực tế, hãy dùng MultiIndex.set_codes() hoặc tạo MultiIndex mới.