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
DDDoriginal
2024-12-25 10:25:09162parcourir

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')

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')

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')

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])

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')

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')

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')

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')

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')

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')

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