Heim >Backend-Entwicklung >Python-Tutorial >Wie schmelze ich einen Pandas-DataFrame und wann verwende ich diese Technik?

Wie schmelze ich einen Pandas-DataFrame und wann verwende ich diese Technik?

Barbara Streisand
Barbara StreisandOriginal
2024-12-29 00:52:11463Durchsuche

How to Melt a Pandas DataFrame and When to Use This Technique?

Melting Pandas DataFrames

Was ist Melt?

Das Schmelzen eines Pandas DataFrame erfordert die Umstrukturierung von einem breiten Format, bei dem jede Spalte eine Variable darstellt. in ein Langformat, in dem jede Zeile eine Beobachtung und jede Spalte ein Merkmal-Wert-Paar darstellt.

So schmelzen Sie a DataFrame

Um einen DataFrame zu schmelzen, verwenden Sie die Funktion pd.melt() und geben Sie die folgenden Argumente an:

  • id_vars: Spalten, die als eindeutige Bezeichner beibehalten werden sollen (normalerweise der Primärschlüssel oder index).
  • value_vars: Spalten, die zusammengeführt (in Zeilen umgewandelt) werden sollen. Wenn nicht angegeben, werden alle Spalten, die nicht in id_vars enthalten sind, zusammengeführt.
  • var_name: Name der Spalte, die die ursprünglichen Spaltennamen enthalten wird.
  • value_name: Name der Spalte, die die ursprüngliche Spalte enthalten wird Werte.

Zum Beispiel, um den folgenden DataFrame zu schmelzen:

import pandas as pd

df = pd.DataFrame({'Name': ['Bob', 'John', 'Foo', 'Bar', 'Alex', 'Tom'],
                   'Math': ['A+', 'B', 'A', 'F', 'D', 'C'],
                   'English': ['C', 'B', 'B', 'A+', 'F', 'A']})

wir können Verwenden Sie:

df_melted = pd.melt(df, id_vars=['Name'], value_vars=['Math', 'English'])

Dadurch wird der geschmolzene DataFrame ausgegeben:

   Name  variable  value
0   Bob    Math     A+
1   John    Math      B
2   Foo    Math      A
3   Bar    Math      F
4   Alex    Math      D
5   Tom    Math      C
6   Bob  English      C
7   John  English      B
8   Foo   English      B
9   Bar  English     A+
10  Alex  English      F
11  Tom   English      A

Wann ist Schmelzen zu verwenden?

Schmelzen ist nützlich, wenn Sie Folgendes benötigen:

  • Umfassende Daten in ein für die Darstellung oder Visualisierung geeignetes Format umwandeln.
  • Bereiten Sie Daten für Modelle für maschinelles Lernen vor die bestimmte Datenformate erfordern.
  • Beobachtungen nach ihren eindeutigen Kennungen gruppieren und Aggregationen oder Transformationen an den geschmolzenen Daten durchführen.

Beispielszenarien

Problem 1 : Konvertieren Sie den DataFrame unten in ein geschmolzenes Format mit den Spalten Name, Alter, Betreff und Note.

df = pd.DataFrame({'Name': ['Bob', 'John', 'Foo', 'Bar', 'Alex', 'Tom'],
                   'Math': ['A+', 'B', 'A', 'F', 'D', 'C'],
                   'English': ['C', 'B', 'B', 'A+', 'F', 'A']})
df_melted = pd.melt(df, id_vars=['Name', 'Age'], var_name='Subject', value_name='Grade')

print(df_melted)

Ausgabe:

   Name  Age Subject Grade
0   Bob   13  English      C
1  John   16  English      B
2   Foo   16  English      B
3   Bar   15  English     A+
4  Alex   17  English      F
5   Tom   12  English      A
6   Bob   13     Math     A+
7  John   16     Math      B
8   Foo   16     Math      A
9   Bar   15     Math      F
10 Alex   17     Math      D
11  Tom   12     Math      C

Problem 2: Filtern Sie den geschmolzenen Datenrahmen aus Problem 1 so, dass er nur Mathematikspalten enthält.

df_melted_math = pd.melt(df, id_vars=['Name', 'Age'], value_vars=['Math'], var_name='Subject', value_name='Grade')

print(df_melted_math)

Ausgabe:

   Name  Age Subject Grade
0   Bob   13    Math     A+
1  John   16    Math      B
2   Foo   16    Math      A
3   Bar   15    Math      F
4  Alex   17    Math      D
5   Tom   12    Math      C

Problem 3: Gruppieren Sie den geschmolzenen DataFrame nach Grad und berechnen Sie die eindeutigen Namen und Themen für jeden Grad.

df_melted_grouped = df_melted.groupby(['Grade']).agg({'Name': ', '.join, 'Subject': ', '.join}).reset_index()

print(df_melted_grouped)

Ausgabe:

  Grade             Name                Subjects
0     A       Foo, Tom           Math, English
1    A+         Bob, Bar           Math, English
2     B  John, John, Foo  Math, English, English
3     C         Bob, Tom           English, Math
4     D             Alex                    Math
5     F        Bar, Alex           Math, English

Problem 4 : Den geschmolzenen DataFrame aus Problem 1 wieder in seinen ursprünglichen Zustand zurückversetzen Format.

df_unmelted = df_melted.pivot_table(index=['Name', 'Age'], columns='Subject', values='Grade', aggfunc='first').reset_index()

print(df_unmelted)

Ausgabe:

   Name  Age English Math
0   Alex   17       F    D
1   Bar   15      A+    F
2   Bob   13       C   A+
3   Foo   16       B    A
4  John   16       B    B
5   Tom   12       A    C

Aufgabe 5: Gruppieren Sie den geschmolzenen DataFrame aus Aufgabe 1 nach Namen und trennen Sie die Fächer und Noten durch Kommas.

df_melted_by_name = df_melted.groupby('Name').agg({'Subject': ', '.join, 'Grade': ', '.join}).reset_index()

print(df_melted_by_name)

Ausgabe:

   Name        Subject Grades
0  Alex  Math, English   D, F
1   Bar  Math, English  F, A+
2   Bob  Math, English  A+, C
3   Foo  Math, English   A, B
4  John  Math, English   B, B
5   Tom  Math, English   C, A

Problem 6: Den gesamten DataFrame in einer einzelnen Wertespalte verschmelzen, wobei eine weitere Spalte die ursprünglichen Spaltennamen enthält.

df_melted_full = df.melt(ignore_index=False)

print(df_melted_full)

Ausgabe:

   Name  Age  variable  value
0   Bob   13    Math     A+
1  John   16    Math      B
2   Foo   16    Math      A
3   Bar   15    Math      F
4  Alex   17    Math      D
5   Tom   12    Math      C
6   Bob   13  English      C
7  John   16  English      B
8   Foo   16  English      B
9   Bar   15  English     A+
10 Alex   17  English      F
11  Tom   12  English      A

Das obige ist der detaillierte Inhalt vonWie schmelze ich einen Pandas-DataFrame und wann verwende ich diese Technik?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn