บทความนี้จะสาธิตวิธีการลบระดับออกจากดัชนีคอลัมน์แบบหลายชั้น (Multi-level column index) ใน Pandas DataFrame โดยใช้เมธอด columns.droplevel()
ขั้นตอนการสร้าง Multi-level Column Index
ขั้นแรก เราสร้างดัชนีคอลัมน์แบบหลายชั้นโดยใช้ MultiIndex.from_tuples():
import pandas as pd
import numpy as np
items = pd.MultiIndex.from_tuples([
("Col 1", "Col 1", "Col 1"),
("Col 2", "Col 2", "Col 2"),
("Col 3", "Col 3", "Col 3")
])
การสร้าง DataFrame ด้วย MultiIndex
ต่อไป สร้างอาร์เรย์สำหรับดัชนีแถว และสร้าง DataFrame:
# สร้าง MultiIndex สำหรับแถว
arr = [
np.array(['car', 'car', 'car', 'bike', 'bike', 'bike', 'truck', 'truck', 'truck']),
np.array(['valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC'])
]
# สร้าง DataFrame
dataFrame = pd.DataFrame(np.random.randn(9, 3), index=arr, columns=items)
# ตั้งชื่อให้กับดัชนีแถว
dataFrame.index.names = ['level 0', 'level 1']
การลบระดับที่ต้องการ
ใช้ droplevel() เพื่อลบระดับที่ระบุ (ในที่นี้คือระดับที่ 0):
dataFrame.columns = dataFrame.columns.droplevel(0)
ตัวอย่างโค้ดสมบูรณ์
import numpy as np
import pandas as pd
# สร้าง MultiIndex คอลัมน์
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
dataFrame = pd.DataFrame(np.random.randn(9, 3), index=arr, columns=items)
dataFrame.index.names = ['level 0', 'level 1']
print("DataFrame ก่อนลบระดับ:")
print(dataFrame)
# ลบระดับที่ 0
dataFrame.columns = dataFrame.columns.droplevel(0)
print("\nDataFrame หลังลบระดับ:")
print(dataFrame)
ผลลัพธ์ที่คาดหวัง
ก่อนลบระดับ: คอลัมน์จะมี 3 ระดับ (Col 1, Col 1, Col 1), (Col 2, Col 2, Col 2), (Col 3, Col 3, Col 3)
หลังลบระดับที่ 0: คอลัมน์จะเหลือเพียงระดับเดียว คือ Col 1, Col 2, Col 3
หมายเหตุ: เมธอด droplevel() สามารถระบุลำดับระดับที่ต้องการลบได้ (0 = ระดับแรก, 1 = ระดับที่สอง, เป็นต้น) หรือระบุชื่อระดับได้เช่นกัน