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

Python Pandas - Đặt nhiều cấp độ mới trong MultiIndex

Để thiết lập giá trị mới cho tất cả các cấp độ trong MultiIndex cùng lúc, chúng ta dùng phương thức MultiIndex.set_levels() với tham số là danh sách các danh sách levels mới.

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 levels mới cho tất cả cấp độ

print("\nĐặt levels mới cho tất cả cấp độ:\n", multiIndex.set_levels([['p', 'q', 'r', 's'], [10, 20, 30, 40]]))

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 levels mới cho cả 2 cấp độ
print("\nMultiIndex sau set_levels cả 2 cấp độ:\n", multiIndex.set_levels([['p', 'q', 'r', 's'], [10, 20, 30, 40]]))

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 cả 2 cấp độ:
MultiIndex([('p', 30), ('q', 40), ('r', 20), ('s', 10)], names=['ranks', 'student'])

Giải thích kết quả "ngẫu nhiên"

Kết quả [('p', 30), ('q', 40), ('r', 20), ('s', 10)] xuất hiện do:

  • Cấp độ 0 ('ranks'): codes=[0,1,2,3] → levels mới ['p','q','r','s'] → đúng thứ tự p,q,r,s.
  • Cấp độ 1 ('student'): levels gốc đã sắp xếp ['Chris','Jacob','John','Tim'], codes=[2,4,1,0] (wait, chỉ có 4 phần tử, codes max=3). Thực tế codes=[2,3,1,0] cho John,Tim,Jacob,Chris.
  • Levels mới cấp độ 1: [10,20,30,40]. Code 2→30, 3→40, 1→20, 0→10 → 30,40,20,10.

Khuyến nghị

Tránh dùng set_levels() để thay đổi dữ liệu thực tế. Nó dùng cho việc định nghĩa lại tập giá trị hợp lệ của cấp độ. Để thay đổi dữ liệu, hãy tạo MultiIndex mới từ mảng mới.