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

Python Pandas - Đặt cấp độ mới đơn lẻ bằng chỉ số trong MultiIndex

Để thiết lập giá trị mới cho một cấp độ đơn lẻ trong MultiIndex bằng chỉ số cấp độ (0-based), chúng ta dùng phương thức MultiIndex.set_levels() với tham số level là số nguyên.

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 cấp độ 0

print("\nĐặt cấp độ mới cho cấp độ 0:\n", multiIndex.set_levels(['p', 'q', 'r', 's'], level=0))

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 cấp độ 0 (ranks)
print("\nMultiIndex sau set_levels level=0:\n", multiIndex.set_levels(['p', 'q', 'r', 's'], level=0))

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=0:
MultiIndex([('p', 'John'), ('q', 'Tim'), ('r', 'Jacob'), ('s', 'Chris')], names=['ranks', 'student'])

Giải thích cơ chế levels vs codes

Khác với ví dụ trước, ở đây kết quả "đúng như mong đợi" vì:

  • Cấp độ 0 ('ranks') có levels gốc: [1, 2, 3, 4] (đã sắp xếp).
  • Codes của cấp độ 0: [0, 1, 2, 3] (vì giá trị 1,2,3,4 đã theo thứ tự).
  • Levels mới: ['p', 'q', 'r', 's'].
  • Code 0→'p', 1→'q', 2→'r', 3→'s' → Kết quả đúng thứ tự.

Lưu ý quan trọng

set_levels() thay thế levels (giá trị duy nhất), không phải codes (vị trí). Để thay đổi giá trị thực tại từng hàng, hãy:

# Cách an toàn: tạo MultiIndex mới
new_arrays = [['p', 'q', 'r', 's'], ['John', 'Tim', 'Jacob', 'Chris']]
new_mi = pd.MultiIndex.from_arrays(new_arrays, names=('ranks', 'student'))