Để lấy codes (vị trí của từng nhãn trong levels) của MultiIndex, chúng ta sử dụng thuộc tính MultiIndex.codes.
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, 5], ['John', 'Tim', 'Jacob', 'Chris', 'Keiron']]
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('ranks', 'student'))
3. Lấy codes (vị trí nhãn)
print("\nVị trí nhãn (codes) trong MultiIndex:\n", multiIndex.codes)
Ví dụ hoàn chỉnh
import pandas as pd
arrays = [[1, 2, 3, 4, 5], ['John', 'Tim', 'Jacob', 'Chris', 'Keiron']]
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('ranks', 'student'))
print("MultiIndex:\n", multiIndex)
print("\nCác cấp độ (levels):\n", multiIndex.levels)
print("\nCodes (vị trí nhãn):\n", multiIndex.codes)
Kết quả đầu ra
MultiIndex: MultiIndex([(1, 'John'), (2, 'Tim'), (3, 'Jacob'), (4, 'Chris'), (5, 'Keiron')], names=['ranks', 'student']) Các cấp độ (levels): [[1, 2, 3, 4, 5], ['Chris', 'Jacob', 'John', 'Keiron', 'Tim']] Vị trí nhãn (codes): [[0, 1, 2, 3, 4], [2, 4, 1, 0, 3]]
Giải thích codes
Codes là mảng 2D (list of lists) nơi:
- Hàng 0: codes của cấp độ 0 ('ranks') →
[0, 1, 2, 3, 4]trỏ vào levels[0] = [1,2,3,4,5]. - Hàng 1: codes của cấp độ 1 ('student') →
[2, 4, 1, 0, 3]trỏ vào levels[1] = ['Chris','Jacob','John','Keiron','Tim'].
Ví dụ: hàng đầu tiên (1, 'John') → code (0, 2) → levels[0][0]=1, levels[1][2]='John'.
Mối quan hệ Levels - Codes - Values
# Khôi phục giá trị từ levels và codes
values = []
for i in range(len(multiIndex)):
val = tuple(multiIndex.levels[level][multiIndex.codes[level][i]] for level in range(multiIndex.nlevels))
values.append(val)
# values == list(multiIndex)
Cơ chế này giúp MultiIndex tiết kiệm bộ nhớ: lưu levels duy nhất + codes nguyên tử thay vì lặp lại tuple.