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

Python Pandas – แปลง Nested Dictionary เป็น MultiIndex DataFrame

ภาพรวม

แปลง 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']
    }
}

ขั้นตอนการแปลง

  1. สร้าง empty dict ใหม่
  2. วนลูป outer key, inner dict
  3. วนลูป inner key, values
  4. ใช้ tuple (outerKey, innerKey) เป็น key ใหม่
  5. สร้าง 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)