Để xóa nhiều cấp độ (levels) từ MultiIndex cột, dùng columns.droplevel() lặp lại. Tạo MultiIndex cột bằng MultiIndex.from_tuples().
Tạo MultiIndex DataFrame
import numpy as np
import pandas as pd
# Tạo MultiIndex cột 3 cấp độ
items = pd.MultiIndex.from_tuples([
("Col 1", "Col 1", "Col 1"),
("Col 2", "Col 2", "Col 2"),
("Col 3", "Col 3", "Col 3")
])
# MultiIndex hàng (index)
arr = [
np.array(['car', 'car', 'car', 'bike', 'bike', 'bike', 'truck', 'truck', 'truck']),
np.array(['valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC'])
]
# Tạo DataFrame ngẫu nhiên 9x3
dataFrame = pd.DataFrame(np.random.randn(9, 3), index=arr, columns=items)
dataFrame.index.names = ['level 0', 'level 1']
print("DataFrame gốc (3 cấp cột):\n", dataFrame)
Xóa cấp độ lần 1 (index 0)
dataFrame.columns = dataFrame.columns.droplevel(0)
print("\nSau xóa cấp độ 0:\n", dataFrame)
Xóa cấp độ lần 2 (index 0 lại, vì đã dịch xuống)
dataFrame.columns = dataFrame.columns.droplevel(0)
print("\nSau xóa cấp độ 1 (gốc):\n", dataFrame)
Ví dụ hoàn chỉnh
import numpy as np
import pandas as pd
items = pd.MultiIndex.from_tuples([
("Col 1", "Col 1", "Col 1"),
("Col 2", "Col 2", "Col 2"),
("Col 3", "Col 3", "Col 3")
])
arr = [
np.array(['car', 'car', 'car', 'bike', 'bike', 'bike', 'truck', 'truck', 'truck']),
np.array(['valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC'])
]
dataFrame = pd.DataFrame(np.random.randn(9, 3), index=arr, columns=items)
dataFrame.index.names = ['one', 'two']
print("DataFrame gốc:\n", dataFrame)
# Xóa cấp độ đầu tiên
dataFrame.columns = dataFrame.columns.droplevel(0)
print("\nSau xóa cấp độ 0:\n", dataFrame)
# Xóa cấp độ tiếp theo (gốc level 1)
dataFrame.columns = dataFrame.columns.droplevel(0)
print("\nSau xóa cấp độ 1:\n", dataFrame)
Kết quả đầu ra (ví dụ)
DataFrame gốc:
Col 1 Col 2 Col 3
Col 1 Col 2 Col 3 Col 1 Col 2 Col 3 Col 1 Col 2 Col 3
one two
car valueA 0.425 -1.720 0.373 0.021 0.503 1.301 1.148 1.185 -0.128
valueB -0.649 -0.614 0.313 0.945 -0.239 -0.628 0.593 -0.218 0.911
valueC 0.286 1.152 -1.358 0.478 -0.171 0.735 -1.001 -0.612 0.093
bike valueA ...
...
Sau xóa cấp độ 0:
Col 1 Col 2 Col 3
Col 1 Col 2 Col 3 Col 1 Col 2 Col 3 Col 1 Col 2 Col 3
...
Sau xóa cấp độ 1:
Col 1 Col 2 Col 3
one two
car valueA 0.425 0.021 1.148
valueB -0.649 0.945 0.593
valueC 0.286 0.478 -1.001
bike valueA -0.649 0.945 0.593
valueB -0.614 -0.239 -0.218
valueC 0.313 -0.628 0.911
truck valueA 0.286 0.478 -1.001
valueB 1.152 -0.171 -0.612
valueC -1.358 0.735 0.093
Giải thích
- MultiIndex cột ban đầu: 3 cấp độ (level 0, 1, 2) tất cả giá trị "Col 1", "Col 2", "Col 3".
droplevel(0)xóa cấp độ đầu tiên (level 0). Sau đó level 1 trở thành level 0 mới.- Gọi lại
droplevel(0)xóa cấp độ tiếp theo. - Cuối cùng chỉ còn 1 cấp cột: Col 1, Col 2, Col 3.
Xóa cấp độ cụ thể theo tên: df.columns.droplevel('level_name').