Maison > développement back-end > Tutoriel Python > Comment faire pivoter un DataFrame Pandas : un guide complet pour remodeler les données ?

Comment faire pivoter un DataFrame Pandas : un guide complet pour remodeler les données ?

DDD
Libérer: 2024-12-25 10:25:09
original
214 Les gens l'ont consulté

How to Pivot a Pandas DataFrame: A Comprehensive Guide to Reshaping Data?

Comment puis-je faire pivoter un dataframe ?

Qu'est-ce que le pivot ?

  • Remodeler un DataFrame de long à Format large
  • Permet de créer un nouveau DataFrame où les valeurs sont agrégées en fonction d'une ou plusieurs colonnes

Comment pivoter ?

  • Plusieurs méthodes pour faire pivoter un DataFrame :

    • pd.DataFrame.pivot_table
    • pd.DataFrame.groupby pd.DataFrame.unstack
    • pd.DataFrame.set_index pd.DataFrame.unstack
    • pd.DataFrame.pivot (moins flexible)
    • pd.crosstab (pour la tabulation croisée)
    • pd.factorize np.bincount (avancé, élevé performances)
    • pd.get_dummies pd.DataFrame.dot (tabulation croisée)

Format long vers format large ?

  • Format long :

    • Chaque observation en occupe un rangée
    • Plusieurs colonnes représentant différents attributs/mesures
  • Format large :

    • Chaque observation occupe une colonne
    • Plusieurs lignes représentant différents attributs/mesures

Exemples

Question 1 : Pourquoi est-ce que j'obtiens ValueError : l'index contient des entrées en double, ne peut pas être remodelé ?

  • Cela se produit lorsque vous tentez de faire pivoter un DataFrame avec des clés en double sur lesquelles il est en cours. pivoted
  • Exemple : si df a des entrées en double pour la ligne et le col et que vous pivotez avec df.pivot(index='row', columns='col'), vous obtiendrez l'erreur.

Question 2 : Comment puis-je faire pivoter df de telle sorte que les valeurs de colonne soient des colonnes, les valeurs de ligne soient l'index et la moyenne de val0 soit la valeurs ?

  • Utilisez pd.DataFrame.pivot_table :

    df.pivot_table(values='val0', index='row', columns='col', aggfunc='mean')
    Copier après la connexion
    Copier après la connexion

Question 3 : Comment faire en sorte que les valeurs manquantes soient 0 ?

  • Utiliser l'argument fill_value dans pd.DataFrame.pivot_table :

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='mean')
    Copier après la connexion
    Copier après la connexion

Question 4 : Puis-je obtenir autre chose que la moyenne, comme peut-être une somme ?

  • Utiliser un argument aggfunc différent dans pd.DataFrame.pivot_table :

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='sum')
    Copier après la connexion
    Copier après la connexion

Question 5 : Puis-je effectuer plus d'une agrégation à la fois ?

  • Fournir une liste des callables à l'argument aggfunc dans pd.DataFrame.pivot_table :

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc=[np.size, np.mean])
    Copier après la connexion

Question 6 : Puis-je agréger plusieurs colonnes de valeurs ?

  • Transmettre plusieurs noms de colonnes en tant que liste de valeurs dans pd.DataFrame.pivot_table :

    df.pivot_table(values=['val0', 'val1'], index='row', columns='col', fill_value=0, aggfunc='mean')
    Copier après la connexion

Question 7 : Puis-je subdiviser en plusieurs colonnes ?

  • Transmettre plusieurs noms de colonnes sous forme de liste indexer ou des colonnes dans pd.DataFrame.pivot_table :

    df.pivot_table(values='val0', index=['row', 'item'], columns='col', fill_value=0, aggfunc='mean')
    Copier après la connexion

Question 8 : Ou

  • Peut subdiviser en plusieurs colonnes dans l'index et les colonnes en utilisant pd.DataFrame.pivot_table :

    df.pivot_table(values='val0', index=['key', 'row'], columns=['item', 'col'], fill_value=0, aggfunc='mean')
    Copier après la connexion

Question 9 : Puis-je agréger la fréquence à laquelle la colonne et les lignes apparaissent ensemble, c'est-à-dire « tabulation croisée » ?

  • Utilisez pd.crosstab :

    df.pivot_table(values='val0', index='row', columns='col', aggfunc='mean')
    Copier après la connexion
    Copier après la connexion

Question 10 : Comment convertir un DataFrame de long en large en pivotant sur SEULEMENT deux colonnes ?

df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='mean')
Copier après la connexion
Copier après la connexion

Question 11 : Comment aplatir le multiple index à index unique après pivot ?

  • Rejoindre l'index en plusieurs parties en un seul chaîne :

    df.pivot_table(values='val0', index='row', columns='col', fill_value=0, aggfunc='sum')
    Copier après la connexion
    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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal