ภาพรวม
แปลง Nested Dictionary (dict ของ dict) ให้เป็น DataFrame ที่มี MultiIndex Columns (หลายระดับหัวคอลัมน์)
โครงสร้างข้อมูล
dictNested = {
'Cricket': {
'Boards': ['BCCI', 'CA', 'ECB'],
'Country': ['India', 'Australia', 'England']
},
'Football': {
'Boards': ['TFA', 'TCSA', 'GFA'],
'Country': ['England', 'Canada', 'Germany']
}
}
ขั้นตอนการแปลง
- สร้าง empty dict ใหม่
- วนลูป outer key, inner dict
- วนลูป inner key, values
- ใช้ tuple
(outerKey, innerKey)เป็น key ใหม่ - สร้าง DataFrame จาก dict ใหม่ -> ได้ MultiIndex Columns อัตโนมัติ
ตัวอย่างโค้ด
import pandas as pd
dictNested = {
'Cricket': {'Boards': ['BCCI', 'CA', 'ECB'], 'Country': ['India', 'Australia', 'England']},
'Football': {'Boards': ['TFA', 'TCSA', 'GFA'], 'Country': ['England', 'Canada', 'Germany']}
}
print("Nested Dictionary...\n", dictNested)
new_dict = {}
for outerKey, innerDict in dictNested.items():
for innerKey, values in innerDict.items():
new_dict[(outerKey, innerKey)] = values
# แปลงเป็น MultiIndex DataFrame
df = pd.DataFrame(new_dict)
print("\nMulti-index DataFrame...\n", df)
ผลลัพธ์
Multi-index DataFrame...
Cricket Football
Boards Country Boards Country
0 BCCI India TFA England
1 CA Australia TCSA Canada
2 ECB England GFA Germany
การเข้าถึงข้อมูล MultiIndex
df['Cricket'] # Sub-dataframe ของ Cricket
df['Cricket']['Boards'] # Series ของ Boards
df[('Cricket', 'Boards')] # ตรงๆ (tuple key)
df.xs('Boards', axis=1, level=1) # ทุก sport ที่มี Boards
วิธีสร้าง MultiIndex โดยตรง (Alternative)
# จาก list of tuples
columns = pd.MultiIndex.from_tuples([
('Cricket', 'Boards'), ('Cricket', 'Country'),
('Football', 'Boards'), ('Football', 'Country')
])
df = pd.DataFrame(new_dict, columns=columns)