0Pricing
Pandas & NumPy Academy · Lektion

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  160

Einfacher 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    160

Auswä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    160

melt() 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

  1. pivot_table: Kreuztabellen
  2. melt: Vom Breit- ins Langformat
  3. stack und unstack mit MultiIndex
  4. crosstab für Häufigkeitstabellen
← Zurück zu Pandas & NumPy Academy