บทความนี้สาธิตวิธีตั้งค่าและแสดง Index ของ DataFrame ในรูปแบบ MultiIndex (หลายระดับ) โดยใช้ set_index() และ append=True
โค้ดตัวอย่าง
import pandas as pd
# ข้อมูลต้นฉบับ
d = {
'Car': ['BMW', 'Lexus', 'Audi', 'Mercedes', 'Jaguar', 'Bentley'],
'Date_of_purchase': ['2020-10-10', '2020-10-12', '2020-10-17', '2020-10-16', '2020-10-19', '2020-10-22']
}
# สร้าง DataFrame
dataFrame = pd.DataFrame(d)
print("DataFrame ต้นฉบับ:")
print(dataFrame)
# ตั้งค่า MultiIndex: เพิ่ม 'Car' เป็นระดับที่ 2 ของ Index
# append=True: เพิ่มเข้าไปใน Index เดิม (RangeIndex) ไม่ใช่แทนที่
# drop=False: เก็บคอลัมน์ 'Car' ไว้ใน DataFrame ด้วย
dataFrame.set_index(["Car"], inplace=True, append=True, drop=False)
print("\nMultiIndex:")
print(dataFrame.index)
print("\nDataFrame หลัง Set Index:")
print(dataFrame)
ผลลัพธ์
DataFrame ต้นฉบับ:
Car Date_of_purchase
0 BMW 2020-10-10
1 Lexus 2020-10-12
2 Audi 2020-10-17
3 Mercedes 2020-10-16
4 Jaguar 2020-10-19
5 Bentley 2020-10-22
MultiIndex:
MultiIndex(levels=[[0, 1, 2, 3, 4, 5], ['Audi', 'BMW', 'Bentley', 'Jaguar', 'Lexus', 'Mercedes']],
labels=[[0, 1, 2, 3, 4, 5], [1, 4, 0, 5, 3, 2]],
names=[None, 'Car'])
DataFrame หลัง Set Index:
Car Date_of_purchase
Car
0 BMW BMW 2020-10-10
1 Lexus Lexus 2020-10-12
2 Audi Audi 2020-10-17
3 Mercedes Mercedes 2020-10-16
4 Jaguar Jaguar 2020-10-19
5 Bentley Bentley 2020-10-22
อธิบาย MultiIndex Structure
- Level 0: Index ต้นฉบับ (0, 1, 2, 3, 4, 5) - ไม่มีชื่อ (None)
- Level 1: คอลัมน์ 'Car' - ชื่อระดับคือ 'Car'
- Labels: ตำแหน่งใน Levels ของแต่ละแถว
การเข้าถึงข้อมูลด้วย MultiIndex
# เข้าถึงด้วย Tuple (Level 0, Level 1)
print(dataFrame.loc[(0, 'BMW')])
# Cross-section: ทุก Level 0 ที่ Level 1 = 'BMW'
print(dataFrame.xs('BMW', level='Car'))
# Reset กลับเป็น Index ปกติ
dataFrame.reset_index(inplace=True, drop=True)
การสร้าง MultiIndex โดยตรง
# สร้าง MultiIndex จาก Arrays
arrays = [
['A', 'A', 'B', 'B'],
['one', 'two', 'one', 'two']
]
index = pd.MultiIndex.from_arrays(arrays, names=['Letter', 'Number'])
df = pd.DataFrame({'Value': [1, 2, 3, 4]}, index=index)
print(df)