Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python – ลบแถวเฉพาะจาก MultiIndex Pandas DataFrame

บทความนี้สาธิตวิธีลบแถวเฉพาะจาก 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 ให้ครบทุกระดับ (เว้นแต่ใช้ level parameter)