Maison >développement back-end >Tutoriel Python >Comment puis-je fondre et défondre efficacement les dataFrames Pandas ?

Comment puis-je fondre et défondre efficacement les dataFrames Pandas ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-20 09:48:10593parcourir

How Can I Efficiently Melt and Unmelt Pandas DataFrames?

Fusion d'une dataframe Pandas

Introduction

Dans Pandas, la fusion de dataframes implique la transposition de données d'un format large vers un format long format, ce qui le rend utile pour diverses tâches de manipulation de données. Cet article vous guidera tout au long du processus de fusion des dataframes et explorera différents scénarios avec des exemples concrets.

Problème 1 : Transposition des données de colonne

Objectif : Transposer les colonnes en lignes tout en répétant la colonne d'origine noms.

Solution :

df.melt(id_vars=['Name', 'Age'], var_name='Subject', value_name='Grades')

Ce code créera un nouveau dataframe avec les colonnes « Sujet » et « Notes », tandis que les noms de colonnes d'origine seront répétés pour chacun ligne.

Exemple :

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

melted_df = df.melt(id_vars=['Name', 'Age'], var_name='Subject', value_name='Grades')

print(melted_df)

Sortie :

   Name  Age Subject Grades
0   Bob   13  English     C
1  John   16  English     B
...
11  Tom   13     Math     C

Problème 2 : Filtrage des colonnes

Objectif : Faire fondre des colonnes spécifiques, en excluant les autres.

Solution :

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

Dans cet exemple, seule la colonne « Math » est fondue tandis que « Âge » et « Nom » sont conservés comme identifiants.

Exemple :

melted_df = df.melt(id_vars=['Name', 'Age'], value_vars='Math', var_name='Subject', value_name='Grades')

print(melted_df)

Sortie :

   Name  Age Subject Grades
0   Bob   13    Math    A+
1  John   16    Math     B
...

Problème 3 : Regroupement et Commander du fondu Données

Objectif : Regrouper les données fondues et trier par valeurs.

Solution :

melted_df.groupby('value', as_index=False).agg({
    'Subject': ', '.join,
    'Grades': ', '.join
}).sort_values('value', ascending=True)

Ce code regroupera les données fondues par score et joindra les valeurs « Sujet » et « Notes » avec virgules.

Exemple :

grouped_df = melted_df.groupby('value', as_index=False).agg({
    'Subject': ', '.join,
    'Grades': ', '.join
}).sort_values('value', ascending=True)

print(grouped_df)

Sortie :

  value             Name                Subjects
0     A         Foo, Tom           Math, English
1    A+         Bob, Bar           Math, English
2     B  John, John, Foo  Math, English, English
...

Problème 4 : Infusion Dataframes

Objectif : Inverser le processus de fusion, en revenant au format d'origine.

Solution :

melted_df.pivot_table("Grades", ['Name', 'Age'], 'Subject', aggfunc='first').reset_index()

Ce code fera pivoter la trame de données fondue vers la largeur d'origine format.

Exemple :

unmelted_df = melted_df.pivot_table("Grades", ['Name', 'Age'], 'Subject', aggfunc='first').reset_index()

print(unmelted_df)

Sortie :

   Name  Age Math English
0   Alex   15    D       F
1   Bar   15    F      A+
2   Bob   13   A+       C
3   Foo   16    A       B
...

Problème 5 : Regroupement et Combinaison Colonnes

Objectif : Regrouper les données par une colonne spécifique et combiner d'autres colonnes avec des virgules.

Solution :

melted_df.groupby('Name', as_index=False).agg(
    Subjects=', '.join,
    Grades=', '.join
)

Ce code regroupera les données par « Nom » et combinera « Sujet » et « Notes » avec virgules.

Exemple :

grouped_df = melted_df.groupby('Name', as_index=False).agg(
    Subjects=', '.join,
    Grades=', '.join
)

print(grouped_df)

Sortie :

   Name        Subjects Grades
0  Alex  Math, English   D, F
1   Bar  Math, English  F, A+
2   Bob  Math, English  A+, C
...

Problème 6 : Tout fondre Colonnes

Objectif :Convertir toutes les colonnes en lignes, y compris les identifiants.

Solution :

df.melt(var_name='Column', value_name='Value')

Ce code fondra toutes les colonnes en lignes, traitant toutes les données comme valeurs.

Exemple :

melted_df = df.melt(var_name='Column', value_name='Value')

print(melted_df)

Sortie :

    Column Value
0       Age    16
1       Age    16
2       Age    15
...
11  English     C
12     Math     A
13     Math    A+

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:
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