Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Python Pandas - Lấy codes (vị trí nhãn) trong MultiIndex

Để 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.