บทความนี้สาธิตวิธีลบแถวเฉพาะจาก DataFrame ที่มี MultiIndex (ดัชนีหลายระดับ) โดยใช้เมธอด drop()
โค้ดตัวอย่าง
import numpy as np
import pandas as pd
# สร้าง MultiIndex Array สำหรับแถว
arr = [
np.array(['car', 'car', 'car', 'bike', 'bike', 'bike', 'truck', 'truck', 'truck']),
np.array(['valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC', 'valueA', 'valueB', 'valueC'])
]
# สร้าง DataFrame พร้อม MultiIndex
dataFrame = pd.DataFrame(
np.random.randn(9, 3),
index=arr,
columns=['Col 1', 'Col 2', 'Col 3']
)
# ตั้งชื่อระดับ Index
dataFrame.index.names = ['level 0', 'level 1']
print("DataFrame ต้นฉบับ:")
print(dataFrame)
# ลบแถวที่ level 0 = 'car' และ level 1 = 'valueA'
# ใช้ Tuple ระบุ Index: ('car', 'valueA')
dataFrame.drop(('car', 'valueA'), axis=0, inplace=True)
print("\nDataFrame หลังลบ ('car', 'valueA'):")
print(dataFrame)
ผลลัพธ์
DataFrame ต้นฉบับ:
Col 1 Col 2 Col 3
level 0 level 1
car valueA 0.845965 -0.850953 -0.335662
valueB 0.534764 -0.107635 1.008855
valueC -0.507910 -0.664625 1.671653
bike valueA -0.475751 -0.244113 0.672352
valueB -0.273670 1.118635 0.428750
valueC -1.064504 -0.344729 0.481037
truck valueA -0.508659 1.352390 1.382799
valueB 1.144299 -0.092568 -1.071624
valueC -0.710767 0.967018 -0.047430
DataFrame หลังลบ ('car', 'valueA'):
Col 1 Col 2 Col 3
level 0 level 1
car valueB 0.534764 -0.107635 1.008855
valueC -0.507910 -0.664625 1.671653
bike valueA -0.475751 -0.244113 0.672352
valueB -0.273670 1.118635 0.428750
valueC -1.064504 -0.344729 0.481037
truck valueA -0.508659 1.352390 1.382799
valueB 1.144299 -0.092568 -1.071624
valueC -0.710767 0.967018 -0.047430
รายละเอียด drop() สำหรับ MultiIndex
# ลบ 1 แถว (ระบุ Tuple ให้ครบทุกระดับ)
df.drop(('car', 'valueA'), axis=0)
# ลบหลายแถวพร้อมกัน
df.drop([('car', 'valueA'), ('bike', 'valueB')], axis=0)
# ลบตาม Level 0 ทั้งหมด (ทุก 'car')
df.drop('car', level=0) # หรือ level='level 0'
# ลบตาม Level 1
df.drop('valueA', level=1) # ลบ valueA ทุก Level 0
# ใช้ Boolean Indexing (ยืดหยุ่นกว่า)
mask = ~((df.index.get_level_values(0) == 'car') & (df.index.get_level_values(1) == 'valueA'))
df = df[mask]
ข้อควรระวัง
inplace=Trueจะแก้ไข DataFrame ต้นฉบับโดยตรง- ถ้า Key ไม่อยู่ใน Index จะเกิด
KeyError(ใช้errors='ignore'เพื่อป้องกัน) - MultiIndex ต้องระบุ Tuple ให้ครบทุกระดับ (เว้นแต่ใช้
levelparameter)