MultiIndex (Hierarchical Index)** คือดัชนีที่มีหลายระดับ (levels) ช่วยจัดการข้อมูลมิติสูงได้ดีขึ้น ใน Pandas สร้างได้จาก DataFrame ด้วย pd.MultiIndex.from_frame()
ขั้นตอนการทำงาน
1. สร้าง Dictionary ของข้อมูล
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']
}
2. สร้าง DataFrame
dataFrame = pd.DataFrame(d)
3. สร้าง MultiIndex จาก DataFrame
multi_idx = pd.MultiIndex.from_frame(dataFrame)
print(multi_idx)
โค้ดตัวอย่างสมบูรณ์
import pandas as pd
# Dictionary of lists
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:\n", dataFrame)
# สร้าง MultiIndex
multi_idx = pd.MultiIndex.from_frame(dataFrame)
print("\nMultiIndex:\n", multi_idx)
ผลลัพธ์
MultiIndex([
('BMW', '2020-10-10'),
('Lexus', '2020-10-12'),
('Audi', '2020-10-17'),
('Mercedes', '2020-10-16'),
('Jaguar', '2020-10-19'),
('Bentley', '2020-10-22')
], names=['Car', 'Date_of_purchase'])
การใช้งาน MultiIndex
- ตั้งเป็น index ของ DataFrame อื่น:
df.set_index(multi_idx) - เลือกข้อมูลระดับหนึ่ง:
df.loc['BMW']หรือdf.xs('BMW', level='Car') - รองรับการ sort, groupby, pivot ได้อย่างมีประสิทธิภาพ
วิธีสร้าง MultiIndex อื่นๆ
# 1. from_tuples
pd.MultiIndex.from_tuples([('BMW', '2020-10-10'), ('Lexus', '2020-10-12')])
# 2. from_arrays
pd.MultiIndex.from_arrays([['BMW', 'Lexus'], ['2020-10-10', '2020-10-12']], names=['Car', 'Date'])
# 3. from_product (Cartesian product)
pd.MultiIndex.from_product([['BMW', 'Lexus'], ['2020', '2021']], names=['Car', 'Year'])