melt: Vom Breit- ins Langformat
Konvertieren Sie einen breiten DataFrame mit pd.melt in das Langformat und geben Sie id_vars sowie value_vars an.
melt: Vom Breit- ins Langformat ist eine kostenlose Pandas & NumPy Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Pandas & NumPy Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.
Datenformate: Wide vs. Long
Daten können grundsätzlich in zwei Formen strukturiert sein. Das Wide-Format enthält eine Zeile pro Objekt und verteilt Messwerte auf mehrere Spalten — beispielsweise separate Spalten für die Umsätze im Januar, Februar und März. Das Long-Format enthält eine Zeile pro Beobachtung, eine Spalte für den Variablennamen und eine weitere für den Wert. Die meisten Pandas-Analysefunktionen, Machine-Learning-Bibliotheken und Visualisierungstools bevorzugen das Long-Format, wodurch melt() zu einem unverzichtbaren Werkzeug für Umformungen wird.
Die Funktion pd.melt()
pd.melt(df) (auch als df.melt() verfügbar) wandelt einen DataFrame im Wide-Format in das Long-Format um. Die wichtigsten Parameter sind id_vars (Spalten, die unverändert als Bezeichner beibehalten werden), value_vars (Spalten, die in Zeilen umgewandelt werden), var_name (Name der neuen Variablenspalte) und value_name (Name der neuen Wertespalte).
import pandas as pd
# Wide format: separate columns per month
df_wide = pd.DataFrame({
'product': ['A', 'B'],
'Jan': [100, 150],
'Feb': [120, 130],
'Mar': [140, 160]
})
print(df_wide)
# product Jan Feb Mar
# 0 A 100 120 140
# 1 B 150 130 160Einfacher Aufruf von melt()
Rufen Sie melt() auf und setzen Sie id_vars auf die Spalten, die Sie als Bezeichner beibehalten möchten. Jede andere Spalte wird entpivotiert: Ihr Name wird zu einem Wert in der neuen Variablenspalte und ihre Zellwerte werden in die Wertespalte verschoben. Die Anzahl der Ausgabezeilen entspricht der Anzahl der Eingabezeilen multipliziert mit der Anzahl der umzuwandelnden Wertespalten.
df_long = df_wide.melt(
id_vars='product',
var_name='month',
value_name='sales'
)
print(df_long)
# product month sales
# 0 A Jan 100
# 1 B Jan 150
# 2 A Feb 120
# 3 B Feb 130
# 4 A Mar 140
# 5 B Mar 160Auswählen, welche Spalten umgewandelt werden
Standardmäßig werden alle Spalten umgewandelt, die nicht in id_vars aufgeführt sind. Verwenden Sie value_vars, um nur eine Teilmenge der Spalten umzuwandeln. Spalten, die weder in id_vars noch in value_vars enthalten sind, werden aus dem Ergebnis entfernt. Das ist nützlich, wenn Ihr DataFrame im Wide-Format eine Mischung aus Zeitreihenspalten und anderen Attributen enthält, die Sie nicht entpivotieren möchten.
df_wide2 = pd.DataFrame({
'product': ['A', 'B'],
'category': ['Electronics', 'Clothing'],
'Jan': [100, 150],
'Feb': [120, 130],
'Mar': [140, 160]
})
# Melt only Jan and Feb, keep product and category
df_long2 = df_wide2.melt(
id_vars=['product', 'category'],
value_vars=['Jan', 'Feb'],
var_name='month',
value_name='sales'
)
print(df_long2)Index nach melt() zurücksetzen
melt() behält die ursprünglichen Zeilenindizes bei, indem es sie für jede Variable wiederholt. Das Ergebnis besitzt daher häufig einen nicht fortlaufenden Index wie [0, 1, 0, 1, 0, 1]. Es empfiehlt sich, direkt nach melt() reset_index(drop=True) aufzurufen, um im Ergebnis einen sauberen, von 0 bis n-1 fortlaufenden Index zu erhalten.
df_long = df_wide.melt(id_vars='product', var_name='month', value_name='sales')
print('Before reset:', df_long.index.tolist())
# [0, 1, 0, 1, 0, 1]
df_long = df_long.reset_index(drop=True)
print('After reset:', df_long.index.tolist())
# [0, 1, 2, 3, 4, 5]melt() ist die Umkehrung von pivot()
melt() ist konzeptionell die Umkehrung von pivot() / pivot_table(). Mit pivot_table() können Sie vom Long- zum Wide-Format und mit melt() vom Wide- zurück zum Long-Format wechseln. Dieser Hin- und Rückweg wird häufig in Pipelines verwendet: Daten im Wide-Format empfangen, sie für Seaborn-Diagramme oder ML-Features ins Long-Format umformen und sie anschließend optional für eine Berichtstabelle zurückpivotieren.
# long -> wide
table = df_long.pivot_table(values='sales', index='product',
columns='month', aggfunc='sum')
print(table)
# product Feb Jan Mar
# A 120 100 140
# B 130 150 160
# wide -> long again
long_again = table.reset_index().melt(id_vars='product', var_name='month', value_name='sales')
print(long_again.head())melt() für Seaborn-Diagramme verwenden
Die kategorialen und relationalen Diagramme von Seaborn funktionieren am besten mit Daten im Long-Format. Ein typischer Ablauf: Beginnen Sie mit einem breiten DataFrame, der eine Spalte pro Gruppe enthält, wandeln Sie ihn mit melt() in das Long-Format um, sodass eine Spalte die Gruppe identifiziert und eine andere die Werte enthält, und übergeben Sie anschließend beide an die Parameter hue und x/y von Seaborn. Dies ist einer der häufigsten Gründe für die Verwendung von melt().
import seaborn as sns
import matplotlib.pyplot as plt
# Long format is required for sns.lineplot with hue
df_long = df_wide.melt(id_vars='product', var_name='month', value_name='sales')
# sns.lineplot(data=df_long, x='month', y='sales', hue='product')
# plt.show()
print('Long data ready for Seaborn:')
print(df_long)Die Ausgabespalten benennen
Standardmäßig nennt melt() die neue Variablenspalte 'variable' und die Wertespalte 'value'. Überschreiben Sie diese Namen immer mit aussagekräftigen Bezeichnungen mithilfe von var_name und value_name. Aussagekräftige Spaltennamen machen nachfolgenden Code leichter lesbar und verhindern Verwechslungen, wenn ein DataFrame Dutzende von Spalten enthält.
# Default: generic column names 'variable' and 'value'
default = df_wide.melt(id_vars='product')
print(default.columns.tolist())
# ['product', 'variable', 'value']
# Better: descriptive names
good = df_wide.melt(id_vars='product', var_name='month', value_name='revenue_usd')
print(good.columns.tolist())
# ['product', 'month', 'revenue_usd']Umwandeln von Umfragedaten
Ein klassischer Anwendungsfall für melt() sind Umfrageantworten, bei denen jede Spalte eine Frage und jede Zeile eine befragte Person darstellt. Durch das Umwandeln wird dieses breite Format in ein Long-Format mit Spalten für die ID der befragten Person, den Namen der Frage und den Antwortwert konvertiert. Anschließend können Sie mit groupby() problemlos die Verteilung der Antworten für jede Frage berechnen.
survey = pd.DataFrame({
'respondent': [1, 2, 3],
'Q1_rating': [5, 3, 4],
'Q2_rating': [4, 5, 3],
'Q3_rating': [2, 4, 5]
})
long = survey.melt(id_vars='respondent', var_name='question', value_name='rating')
print(long)
print(long.groupby('question')['rating'].mean())Das umgewandelte Ergebnis sortieren
Nach dem Umwandeln sind die Zeilen nach der ursprünglichen Spaltenreihenfolge angeordnet (für jede Zeile Jan, Feb, Mär). Häufig möchten Sie zunächst nach der ID-Spalte und anschließend nach der Variablenspalte sortieren. Verwenden Sie sort_values() für den umgewandelten DataFrame, um die für Ihre Analyse oder die weitere Verarbeitung sinnvollste Reihenfolge zu erhalten.
df_long = df_wide.melt(id_vars='product', var_name='month', value_name='sales')
# Sort by product, then month
df_sorted = df_long.sort_values(['product', 'month']).reset_index(drop=True)
print(df_sorted)
# product month sales
# 0 A Feb 120
# 1 A Jan 100
# 2 A Mar 140
# 3 B Feb 130
# 4 B Jan 150
# 5 B Mar 160melt() in einer Datenpipeline
In einer typischen Datenpipeline wird melt() direkt nach dem Laden oder Bereinigen von Daten im Wide-Format und vor jedem Analyse- oder Modellierungsschritt eingesetzt. Platzieren Sie es früh in Ihrer Pipeline, um schnell zum Long-Format zu gelangen. Danach arbeiten alle weiteren Operationen (groupby, seaborn, sklearn) mit den sauberen Daten im Long-Format, ohne Sonderfälle berücksichtigen zu müssen.
def load_and_reshape(filepath):
raw = pd.read_csv(filepath)
# Melt all month columns into long format
month_cols = [c for c in raw.columns if c.startswith('month_')]
long = raw.melt(
id_vars=[c for c in raw.columns if c not in month_cols],
value_vars=month_cols,
var_name='month',
value_name='value'
)
return long.reset_index(drop=True)Kurztest
Testen Sie Ihr Verständnis der in dieser Lektion behandelten Umwandlung von breit zu lang mit pd.melt.
Zusammenfassung der Lektion
In dieser Lektion haben Sie gelernt: melt() konvertiert Daten durch das Auflösen von Spalten in Zeilen vom Wide-Format in das Long-Format; id_vars legt fest, welche Spalten unverändert bleiben, und value_vars bestimmt, welche Spalten umgewandelt werden; var_name und value_name geben den neuen Spalten aussagekräftige Namen; und das Long-Format wird für Seaborn-, groupby- und ML-Pipelines bevorzugt. Als Nächstes sehen wir uns stack und unstack zum Umformen von MultiIndex-DataFrames an.
Häufig gestellte Fragen
Ist die Lektion „melt: Vom Breit- ins Langformat“ kostenlos?
Ja — der vollständige Text von „melt: Vom Breit- ins Langformat“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Pandas & NumPy Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „melt: Vom Breit- ins Langformat“?
Konvertieren Sie einen breiten DataFrame mit pd.melt in das Langformat und geben Sie id_vars sowie value_vars an. Du übst Pandas & NumPy Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Pandas & NumPy Academy zu starten?
Keine Vorkenntnisse erforderlich. Pandas & NumPy Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „melt: Vom Breit- ins Langformat“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Pandas & NumPy Academy-Lektion Code schreiben und ausführen?
Ja. Jede Pandas & NumPy Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- pivot_table: Kreuztabellen
- melt: Vom Breit- ins Langformat
- stack und unstack mit MultiIndex
- crosstab für Häufigkeitstabellen