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

ลบหลาย Level จาก Multi-level Column Index ใน Pandas

แนวคิด

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])