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

Python Pandas - Sắp xếp lại các cấp độ trong MultiIndex

Để sắp xếp lại thứ tự các cấp độ (levels) trong MultiIndex, chúng ta sử dụng phương thức MultiIndex.reorder_levels() với tham số order chỉ định thứ tự mới.

Các bước thực hiện

1. Import thư viện

import pandas as pd

2. Tạo dữ liệu và MultiIndex

arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob'], [50, 30, 40, 70]]
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('rank', 'student', 'points'))

3. Sắp xếp lại cấp độ

Tham số order=[2, 0, 1] nghĩa là: cấp độ mới 0 = cấp độ cũ 2, cấp độ mới 1 = cấp độ cũ 0, cấp độ mới 2 = cấp độ cũ 1.

print("\nSắp xếp lại cấp độ:\n", multiIndex.reorder_levels(order=[2, 0, 1]))

Ví dụ hoàn chỉnh

import pandas as pd

# Tạo mảng dữ liệu
arrays = [[2, 4, 3, 1], ['Peter', 'Chris', 'Andy', 'Jacob'], [50, 30, 40, 70]]

# Tạo MultiIndex với tên cấp độ
multiIndex = pd.MultiIndex.from_arrays(arrays, names=('rank', 'student', 'points'))

# Hiển thị MultiIndex gốc
print("MultiIndex gốc:\n", multiIndex)
print("\nCác cấp độ:\n", multiIndex.levels)

# Sắp xếp lại cấp độ: points -> rank -> student
print("\nMultiIndex sau khi sắp xếp lại (order=[2, 0, 1]):\n", multiIndex.reorder_levels(order=[2, 0, 1]))

Kết quả đầu ra

MultiIndex gốc:
MultiIndex([(2, 'Peter', 50), (4, 'Chris', 30), (3, 'Andy', 40), (1, 'Jacob', 70)], names=['rank', 'student', 'points'])
Các cấp độ:
[[1, 2, 3, 4], ['Andy', 'Chris', 'Jacob', 'Peter'], [30, 40, 50, 70]]
MultiIndex sau khi sắp xếp lại:
MultiIndex([(50, 2, 'Peter'), (30, 4, 'Chris'), (40, 3, 'Andy'), (70, 1, 'Jacob')], names=['points', 'rank', 'student'])

Lưu ý quan trọng

  • reorder_levels() chỉ thay đổi thứ tự cấp độ, không sắp xếp dữ liệu.
  • Tham số order chấp nhận danh sách chỉ số nguyên (0-based) hoặc tên cấp độ.
  • Phương thức trả về MultiIndex mới, không sửa đổi đối tượng gốc.