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
Libérer: 2024-12-20 09:48:10
original
590 Les gens l'ont consulté

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

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

Sortie :

   Name  Age Subject Grades
0   Bob   13  English     C
1  John   16  English     B
...
11  Tom   13     Math     C
Copier après la connexion

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

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

Sortie :

   Name  Age Subject Grades
0   Bob   13    Math    A+
1  John   16    Math     B
...
Copier après la connexion

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

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

Sortie :

  value             Name                Subjects
0     A         Foo, Tom           Math, English
1    A+         Bob, Bar           Math, English
2     B  John, John, Foo  Math, English, English
...
Copier après la connexion

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

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

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

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

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

Sortie :

   Name        Subjects Grades
0  Alex  Math, English   D, F
1   Bar  Math, English  F, A+
2   Bob  Math, English  A+, C
...
Copier après la connexion

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

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

Sortie :

    Column Value
0       Age    16
1       Age    16
2       Age    15
...
11  English     C
12     Math     A
13     Math    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