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
456 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!

source:php.cn
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