Pandas-Datenumformung (pivot / melt / stack / unstack)

Datenumformung ist eine häufige Operation in der Datenanalyse und wird verwendet, um die Layoutstruktur von Daten zu ändern. Pandas bietet Funktionen wie pivot, melt, stack und unstack, um zwischen langem Format und breitem Format zu konvertieren.


pivot Pivot-Tabelle

pivotKonvertiert Daten im langen Format in das breite Format, ähnlich der PivotTable-Funktion von Excel.

Grundlegende Verwendung

Beispiel

import pandas as pd

# Daten im langen Format erstellen
df = pd.DataFrame({
    "Date": ["2024-01-01", "2024-01-01", "2024-01-02", "2024-01-02"],
    "Produkt": ["A", "B", "A", "B"],
    "Verkäufe": [100, 150, 120, 90]
})

print("Daten im langen Format:")
print(df)
print()

# In das breite Format konvertieren
pivot_df = df.pivot(index="Date", columns="Product", values="Sales")
print("Daten im breiten Format:")
print(pivot_df)

Mehrfachindex

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Year": ["2024", "2024", "2024", "2024"],
    "Quarter": ["Q1", "Q1", "Q2", "Q2"],
    "Produkt": ["A", "B", "A", "B"],
    "Verkäufe": [100, 150, 120, 90]
})

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

# Pivot mit mehreren Indizes
pivot_df = df.pivot(index=["Year", "Quarter"], columns="Product", values="Sales")
print("Pivot mit mehreren Indizes:")
print(pivot_df)

Aggregatfunktion

Beispiel

import pandas as pd

# Fall mit doppelten Werten
df = pd.DataFrame({
    "Date": ["2024-01-01", "2024-01-01", "2024-01-01", "2024-01-02"],
    "Produkt": ["A", "A", "B", "B"],
    "Verkäufe": [100, 110, 80, 90]
})

print("Daten mit doppelten Werten:")
print(df)
print()

# pivot unterstützt standardmäßig keine doppelten Werte, Sie müssen pivot_table verwenden und eine Aggregatfunktion angeben
pivot_df = df.pivot_table(index="Date", columns="Product", values="Sales", aggfunc="sum")
print("Aggregation mit sum:")
print(pivot_df)
print()

# mean verwenden
print("Aggregation mit mean:")
print(df.pivot_table(index="Date", columns="Product", values="Sales", aggfunc="mean"))

pivotDoppelte Werte sind nicht erlaubt; wenn doppelte Werte vorhanden sind, verwenden Siepivot_tableund geben Sie eine Aggregatfunktion an.


melt Unpivot

meltKonvertiert Daten im breiten Format in das lange Format, die umgekehrte Operation von pivot.

Beispiel

import pandas as pd

# Daten im breiten Format erstellen
df = pd.DataFrame({
    "Date": ["2024-01-01", "2024-01-02"],
    "A": [100, 120],
    "B": [150, 90]
})

print("Daten im breiten Format:")
print(df)
print()

# In das lange Format konvertieren
melted = df.melt(id_vars="Date", var_name="Product", value_name="Sales")
print("Daten im langen Format:")
print(melted)

Mehrere Spalten unverändert lassen

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Stadt": ["Beijing", "Shanghai"],
    "2023 Revenue": [1000, 800],
    "2023 Profit": [200, 150],
    "2024 Revenue": [1200, 950],
    "2024 Profit": [250, 180]
})

print("Breites Format:")
print(df)
print()

# "City" unverändert lassen, andere Spalten ins lange Format konvertieren
melted = df.melt(
    id_vars="City",
    var_name="Indicator",
    value_name="Value"
)
print("Langes Format:")
print(melted)

stack und unstack

stack und unstack sind Umformungsfunktionen, die auf MultiIndex spezialisiert sind.

unstack

Beispiel

import pandas as pd

# Daten mit mehreren Indexebenen erstellen
df = pd.DataFrame({
    "A": [1, 2, 3, 4],
    "B": [5, 6, 7, 8]
}, index=pd.MultiIndex.from_tuples(
    [("X", 1), ("X", 2), ("Y", 1), ("Y", 2)],
    names=["Kategorie", "Nummer"]
))

print("Mehrstufige Indexdaten:")
print(df)
print()

# unstack wandelt inneren Index in Spalten um
print("Nach unstack:")
print(df.unstack())

stack

Beispiel

import pandas as pd

# Breitformat erstellen (mit Spaltenindex)
df = pd.DataFrame({
    ("A", "X"): [1, 2],
    ("A", "Y"): [3, 4],
    ("B", "X"): [5, 6],
    ("B", "Y"): [7, 8]
})

print("Mit mehrstufigem Spaltenindex:")
print(df)
print()

# stack wandelt Spaltenindex in inneren Index um
print("Nach Stack:")
print(df.stack())

Übung: Geschäftsbericht-Konvertierung

Beispiel

import pandas as pd

# Geschäftsdaten simulieren - Verkaufsdatensätze
sales = pd.DataFrame({
    "Date": ["2024-01"] * 4,
    "Produkt": ["Telefon", "Computer", "Tablet", "Kopfhörer"],
    "Kanal": ["Online", "Online", "Offline", "Online"],
    "Umsatzbetrag": [10000, 20000, 8000, 5000]
})

print("Umsatzrohdaten:")
print(sales)
print()

# Mit Pivot umwandeln
pivot = sales.pivot_table(
    index="Produkt",
    columns="Kanal",
    values="Umsatzbetrag",
    aggfunc="sum",
    fill_value=0
)
print("Kanalumsatz-Pivot:")
print(pivot)
print()

# In Langformat wiederherstellen
print("In Langformat wiederhergestellt:")
print(pivot.reset_index().melt(id_vars="Product", var_name="Channel", value_name="Sales Amount"))

Auswahl der Umformungsfunktion

Funktion Zweck Typisches Szenario
pivot Lang → Breit Zeilen-Spalten-Konvertierung
pivot_table Lang → Breit (mit Aggregation) Wenn doppelte Werte vorliegen
melt Breit → Lang Datenaufbereitung
unstack Index → Spalte Mehrstufiger Index
stack Spalte → Index Mehrstufiger Index

Der Zweck der Datenumformung besteht darin, Daten für die Analyse oder Präsentation besser geeignet zu machen. Wählen Sie die geeignete Konvertierungsmethode basierend auf den nachgelagerten Anforderungen aus.

Andere Erweiterungen