แนวคิด
DataFrame ที่มี MultiIndex columns (หลายระดับ) ใช้ columns.droplevel(level) ลบระดับที่ต้องการ เรียกซ้ำเพื่อลบหลายระดับ
ตัวอย่างโค้ด
import numpy as np
import pandas as pd
# สร้าง MultiIndex columns 3 ระดับ
items = pd.MultiIndex.from_tuples([
("Col 1", "Col 1", "Col 1"),
("Col 2", "Col 2", "Col 2"),
("Col 3", "Col 3", "Col 3")
])
# สร้าง MultiIndex rows (2 ระดับ)
arr = [
np.array(['car','car','car','bike','bike','bike','truck','truck','truck']),
np.array(['valueA','valueB','valueC','valueA','valueB','valueC','valueA','valueB','valueC'])
]
# DataFrame 9x3 พร้อม MultiIndex rows และ columns
df = pd.DataFrame(np.random.randn(9, 3), index=arr, columns=items)
df.index.names = ['level 0', 'level 1']
print("DataFrame ต้นฉบับ (MultiIndex columns 3 ระดับ):\n", df)
# ลบระดับ 0
df.columns = df.columns.droplevel(0)
print("\nหลัง droplevel(0) (เหลือ 2 ระดับ):\n", df)
# ลบระดับ 0 อีกครั้ง (เดิมเป็นระดับ 1)
df.columns = df.columns.droplevel(0)
print("\nหลัง droplevel(0) อีกครั้ง (เหลือ 1 ระดับ):\n", df)
ผลลัพธ์ (ตัวอย่าง)
DataFrame ต้นฉบับ (MultiIndex columns 3 ระดับ):
Col 1 Col 2 Col 3
Col 1 Col 1 Col 1 Col 2 Col 2 Col 2 Col 3 Col 3 Col 3
level 0 level 1
car valueA 0.425077 0.020606 1.148156 -1.720355 0.502863 1.184753 0.373106 1.300935 -0.128404
valueB -0.648708 0.944725 0.593327 -0.613921 -0.238730 -0.218448 0.313042 -0.628065 0.910935
valueC 0.286377 0.478067 -1.000645 1.151793 -0.171433 -0.612346 -1.358061 0.735075 0.092700
...
หลัง droplevel(0) (เหลือ 2 ระดับ):
Col 1 Col 2 Col 3
Col 1 Col 1 Col 2 Col 2 Col 3 Col 3
level 0 level 1
car valueA 0.425077 0.020606 -1.720355 0.502863 0.373106 1.300935
...
หลัง droplevel(0) อีกครั้ง (เหลือ 1 ระดับ):
Col 1 Col 2 Col 3
level 0 level 1
car valueA 0.425077 -1.720355 0.373106
...
คำอธิบาย
droplevel(0)ลบระดับแรก (outermost) ของ column MultiIndex- หลังลบครั้งแรก ระดับที่ 2 กลายเป็นระดับ 0 เรียก
droplevel(0)อีกครั้งได้ - ใช้
droplevel(1)ลบระดับกลาง,droplevel(-1)ลบระดับสุดท้าย
ลบหลายระดับพร้อมกัน (Pandas ใหม่)
# ลบระดับ 0 และ 1 พร้อมกัน
df.columns = df.columns.droplevel([0, 1])