Maison >développement back-end >Tutoriel Python >Comment puis-je fondre et défondre efficacement les dataFrames 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!