Maison > développement back-end > Tutoriel Python > Comment faire fondre un DataFrame Pandas et quand utiliser cette technique ?

Comment faire fondre un DataFrame Pandas et quand utiliser cette technique ?

Barbara Streisand
Libérer: 2024-12-29 00:52:11
original
502 Les gens l'ont consulté

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

Fusion des DataFrames Pandas

Qu'est-ce que Melt ?

Faire fondre un DataFrame pandas implique de le restructurer à partir d'un format large, où chaque colonne représente une variable, à un format long, où chaque ligne représente une observation et chaque colonne représente une paire caractéristique-valeur.

Comment fondre un DataFrame

Pour fondre un DataFrame, utilisez la fonction pd.melt() en précisant les arguments suivants :

  • id_vars : Colonnes à conserver comme identifiants uniques (généralement la clé primaire ou index).
  • value_vars : colonnes à fondre (converties en lignes). Si non spécifié, toutes les colonnes qui ne sont pas dans id_vars sont fondues.
  • var_name : Nom de la colonne qui contiendra les noms de colonnes d'origine.
  • value_name : Nom de la colonne qui contiendra la colonne d'origine valeurs.

Par exemple, pour fondre le DataFrame suivant :

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']})
Copier après la connexion

on peut use :

df_melted = pd.melt(df, id_vars=['Name'], value_vars=['Math', 'English'])
Copier après la connexion

Cela affichera le DataFrame fondu :

   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
Copier après la connexion

Quand utiliser Melt

La fusion est utile lorsque vous devez :

  • Transformez des données étendues dans un format adapté au traçage ou à la visualisation.
  • Préparez les données pour la machine modèles d'apprentissage qui nécessitent des formats de données spécifiques.
  • Regroupez les observations par leurs identifiants uniques et effectuez des agrégations ou des transformations sur les données fondues.

Exemples de scénarios

Problème 1 : Convertissez le DataFrame ci-dessous dans un format fondu, avec les colonnes Nom, Âge, Sujet et 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']})
Copier après la connexion
df_melted = pd.melt(df, id_vars=['Name', 'Age'], var_name='Subject', value_name='Grade')

print(df_melted)
Copier après la connexion

Sortie :

   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
Copier après la connexion

Problème 2 : Filtrer le DataFrame fondu du problème 1 pour inclure uniquement les mathématiques colonnes.

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

print(df_melted_math)
Copier après la connexion

Sortie :

   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
Copier après la connexion

Problème 3 : Regroupez le DataFrame fondu par note et calculez les noms et sujets uniques pour chaque note.

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

print(df_melted_grouped)
Copier après la connexion

Sortie :

  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
Copier après la connexion

Problème 4 : Défondez le DataFrame fondu du problème 1 dans son format d'origine.

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

print(df_unmelted)
Copier après la connexion

Sortie :

   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
Copier après la connexion

Problème 5 : Regroupez le DataFrame fondu DataFrame du problème 1 par nom et séparez les matières et les notes par virgules.

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

print(df_melted_by_name)
Copier après la connexion

Sortie :

   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
Copier après la connexion

Problème 6 : Fondre l'intégralité du DataFrame en une seule colonne de valeurs, avec une autre colonne contenant les noms de colonnes d'origine .

df_melted_full = df.melt(ignore_index=False)

print(df_melted_full)
Copier après la connexion

Sortie :

   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
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal