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 tên cấp độ trong MultiIndex

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