Pandas MultiIndex

MultiIndex ist eine leistungsstarke Indexierungsfunktion in Pandas, mit der mehrstufige hierarchische Strukturen für Zeilen oder Spalten erstellt werden können. Dies ist besonders nützlich beim Umgang mit hochdimensionalen Daten, Gruppenstatistiken und Paneldaten.


MultiIndex erstellen

Erstellen aus einer Liste

Beispiel

import pandas as pd

# Methode 1: Erstellen mit Arrays
arrays = [
    ["A", "A", "B", "B", "C", "C"],
    [1, 2, 1, 2, 1, 2]
]

# Verwenden von pd.MultiIndex.from_arrays
index = pd.MultiIndex.from_arrays(arrays, names=["Kategorie", "Nummer"])
print("Erstellt aus Arrays:")
print(index)
print()

# Methode 2: Verwenden einer Liste von Tupeln
tuples = [
    ("A", 1), ("A", 2), ("B", 1), ("B", 2), ("C", 1), ("C", 2)
]
index = pd.MultiIndex.from_tuples(tuples, names=["Kategorie", "Nummer"])
print("Erstellt aus Tupeln:")
print(index)
print()

# Methode 3: Verwenden von product
index = pd.MultiIndex.from_product(
    [["A", "B", "C"], [1, 2, 3]],
    names=["Kategorie", "Nummer"]
)
print("Erstellt aus Produkt:")
print(index)

Erstellen eines DataFrame mit MultiIndex

Beispiel

import pandas as pd
import numpy as np

# Erstellen eines DataFrame mit MultiIndex
df = pd.DataFrame(
    np.random.randn(6, 4),
    index=pd.MultiIndex.from_tuples(
        [("2024", "Q1"), ("2024", "Q2"), ("2024", "Q3"),
         ("2025", "Q1"), ("2025", "Q2"), ("2025", "Q3")]
    ),
    columns=["Beijing", "Shanghai", "Guangzhou", "Shenzhen"]
)
df.index.names = ["Jahr", "Quartal"]

print("DataFrame mit MultiIndex:")
print(df)

Zugriff auf MultiIndex

Zugriff mit loc/iloc

Beispiel

import pandas as pd

# Beispieldaten erstellen
df = pd.DataFrame({
    "Chinesisch": [85, 92, 78, 88],
    "Mathematik": [90, 88, 95, 82]
}, index=pd.MultiIndex.from_tuples(
    [("Jahrgangsstufe 10", "Klasse A"), ("Jahrgangsstufe 10", "Klasse B"), ("Klasse 11", "Klasse A"), ("Klasse 11", "Klasse B")],
    names=["Jahrgangsstufe", "Klasse"]
))

print("Originaldaten:")
print(df)
print()

# Zugriff auf äußeren Index
print("Zugriff auf alle Grade 10:")
print(df.loc["Grade 10"])
print()

# Zugriff auf inneren Index
print("Zugriff auf Class A:")
print(df.loc[:, "Class A"])
print()

# Zugriff auf mehrere Indexebenen
print("Zugriff auf Class A von Grade 10:")
print(df.loc[("Grade 10", "Class A")])

Zugriff mit xs

Beispiel

import pandas as pd

# Beispieldaten erstellen
df = pd.DataFrame({
    "Chinesisch": [85, 92, 78, 88],
    "Mathematik": [90, 88, 95, 82]
}, index=pd.MultiIndex.from_tuples(
    [("Jahrgangsstufe 10", "Klasse A"), ("Jahrgangsstufe 10", "Klasse B"), ("Klasse 11", "Klasse A"), ("Klasse 11", "Klasse B")],
    names=["Jahrgangsstufe", "Klasse"]
))

# Verwendung von xs zum Zugriff auf Werte auf einer bestimmten Ebene
print("Zugriff auf Grade 10 mit xs:")
print(df.xs("Klasse 10", level="Klasse"))
print()

print("Zugriff auf Klasse A mit xs:")
print(df.xs("Klasse A", level="Klasse"))

MultiIndex konvertieren

Stapeln und Entstapeln

Beispiel

import pandas as pd
import numpy as np

# Erstellen eines DataFrames im Wide-Format
df = pd.DataFrame(
    np.arange(12).reshape(3, 4),
    index=pd.MultiIndex.from_tuples(
        [("Peking", "2024"), ("Shanghai", "2024"), ("Guangzhou", "2024")]
    ),
    columns=pd.MultiIndex.from_tuples(
        [("Q1", "Umsatz"), ("Q1", "Gewinn"), ("Q2", "Umsatz"), ("Q2", "Profit")]
    )
)

print("Ursprüngliche Daten (verschachtelte Spalten):")
print(df)
print()

# unstack: Inneren Index in Spalten umwandeln
df_unstacked = df.unstack()
print("Nach unstack:")
print(df_unstacked)
print()

# stack: Spalten in inneren Index umwandeln
df_stacked = df_unstacked.stack()
print("Nach Stack:")
print(df_stacked)

MultiIndex sortieren

Beispiel

import pandas as pd

# DataFrame mit unsortiertem Index erstellen
df = pd.DataFrame({
    "Wert": [1, 2, 3, 4, 5, 6]
}, index=pd.MultiIndex.from_tuples(
    [("C", 2), ("A", 1), ("B", 2), ("A", 2), ("C", 1), ("B", 1)],
    names=["Buchstabe", "Nummer"]
))

print("Unsortierte Daten:")
print(df)
print()

# Nach äußerer Ebene sortieren
df_sorted1 = df.sort_index()
print("Nach Sortierung nach äußerer Ebene:")
print(df_sorted1)
print()

# Nach innerer Ebene sortieren
df_sorted2 = df.sort_index(level=1)
print("Nach dem Sortieren nach innerer Ebene:")
print(df_sorted2)
print()

# Nach mehreren Ebenen sortieren
df_sorted3 = df.sort_index(level=[0, 1])
print("Nach dem Sortieren nach mehreren Ebenen:")
print(df_sorted3)

Praxis: Gruppenstatistiken

MultiIndex eignet sich sehr gut für Gruppenstatistiken und Pivot-Analysen.

Beispiel

import pandas as pd
import numpy as np

# Verkaufsdaten erstellen
np.random.seed(42)
df = pd.DataFrame({
    "Year": ["2023"] * 6 + ["2024"] * 6,
    "Quarter": ["Q1", "Q2", "Q3", "Q4"] * 3,
    "Produkt": ["Telefon", "Telefon", "Computer", "Computer"] * 3,
    "Region": ["Ostchina", "Südchina", "Nordchina"] * 4,
    "Verkaufsbetrag": np.random.randint(100, 500, 12)
})

print("Ursprüngliche Verkaufsdaten:")
print(df)
print()

# MultiIndex festlegen und Gruppenstatistiken durchführen
df_grouped = df.set_index(["Jahr", "Quartal", "Produkt", "Region"])
print("Gruppiert nach Jahr, Quartal, Produkt, Region:")
print(df_grouped)

# Nach Jahr zusammenfassen
yearly = df_grouped.groupby(level="Jahr").sum()
print("\n"Jährliche Verkäufe:")
print(yearly)

# Nach Jahr und Quartal zusammenfassen
quarterly = df_grouped.groupby(level=["Year", "Quarter"]).sum()
print("\n"Quartalsverkäufe:")
print(quarterly)

Häufige Probleme und Hinweise

1. Verwechslung von Indexebenen

Achten Sie darauf, beim Arbeiten mit Daten keine Ebenen zu verwechseln. Es wird empfohlen, vor und nach Operationen zu prüfen.df.index.names。

2. Fehler beim Indexzugriff

locVerwenden Sie labelbasierten Zugriff,ilocVerwenden Sie positionsbasierten Zugriff; mischen Sie die beiden nicht.

3. Doppelter Index bei Verwendung von concat

Bei VerwendungconcatBeim Zusammenführen von Daten können doppelte Indizes zu unerwarteten Ergebnissen führen. Sie könnenignore_index=Truezum Zurücksetzen.

MultiIndex ist eine Kernfunktion von Pandas für den Umgang mit hochdimensionalen Daten. Die korrekte Verwendung von MultiIndex kann die Datenorganisation übersichtlicher und die Statistiken bequemer machen.

Andere Erweiterungen