Pandas : Comment créer un tableau croisé avec des pourcentages
Vous pouvez utiliser l’argument normalize dans la fonction pandas crosstab() pour créer un tableau croisé qui affiche des valeurs en pourcentage au lieu de nombres :
pd.crosstab(df.col1, df.col2, normalize='index')
L’argument normaliser accepte trois arguments différents :
- all : Afficher le pourcentage par rapport à toutes les valeurs.
- index : Afficher le pourcentage sous forme de total de valeurs de ligne.
- colonnes : affiche le pourcentage sous forme de total des valeurs des colonnes.
Les exemples suivants montrent comment utiliser chacune de ces méthodes en pratique avec le DataFrame pandas suivant :
import pandas as pd #create DataFrame df = pd.DataFrame({'team': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C'], 'position':['G', 'G', 'F', 'G', 'F', 'F', 'F', 'G', 'G', 'F', 'F'], 'points': [22, 25, 24, 39, 34, 20, 18, 17, 20, 19, 22]}) #view DataFrame print(df) team position points 0 A G 22 1 A G 25 2 A F 24 3 B G 39 4 B F 34 5 B F 20 6 B F 18 7 C G 17 8 C G 20 9 C F 19 10 C F 22
Voici à quoi ressemblerait le tableau croisé par défaut pour le nombre de joueurs par équipe et par position :
#create crosstab that displays count by team and position
pd.crosstab(df.team, df.position)
position F G
team
A 1 2
B 3 1
C 2 2
Exemple 1 : Créer un tableau croisé avec des pourcentages relatifs à toutes les valeurs
Nous pouvons utiliser la fonction crosstab() avec l’argument normalize=all pour créer un tableau croisé qui affiche les pourcentages de chaque valeur par rapport au nombre total de toutes les valeurs :
#create crosstab that displays counts as percentage relative to total count pd.crosstab(df.team, df.position, normalize='all') position F G team A 0.090909 0.181818 B 0.272727 0.090909 C 0.181818 0.181818
Voici comment interpréter le résultat :
- Les joueurs de l’équipe A en position F représentent 9,09 % du total des joueurs.
- Les joueurs de l’équipe A en position G représentent 18,18 % du total des joueurs.
Et ainsi de suite.
Exemple 2 : Créer un tableau croisé avec des pourcentages par rapport aux totaux des lignes
Nous pouvons utiliser la fonction crosstab() avec l’argument normalize=index pour créer un tableau croisé qui affiche les pourcentages de chaque valeur par rapport au total de la ligne :
#create crosstab that displays counts as percentage relative to row totals pd.crosstab(df.team, df.position, normalize='index') position F G team A 0.333333 0.666667 B 0.750000 0.250000 C 0.500000 0.500000
Voici comment interpréter le résultat :
- Les joueurs en position F représentent 33,33% du total des joueurs de l’équipe A.
- Les joueurs en position F représentent 75 % du total des joueurs de l’équipe B.
- Les joueurs en position F représentent 50 % du total des joueurs de l’équipe C.
Et ainsi de suite.
Exemple 3 : Créer un tableau croisé avec des pourcentages par rapport aux totaux des colonnes
Nous pouvons utiliser la fonction crosstab() avec l’argument normalize=columns pour créer un tableau croisé qui affiche les pourcentages de chaque valeur par rapport au total de la colonne :
#create crosstab that displays counts as percentage relative to column totals pd.crosstab(df.team, df.position, normalize='columns') position F G team A 0.166667 0.4 B 0.500000 0.2 C 0.333333 0.4
Voici comment interpréter le résultat :
- Les joueurs de l’équipe A représentent 16,67 % du total des joueurs ayant une position F.
- Les joueurs de l’équipe B représentent 50 % du total des joueurs ayant une position F.
- Les joueurs de l’équipe C représentent 33,33 % du total des joueurs ayant une position F.
Et ainsi de suite.
Remarque : Vous pouvez trouver la documentation complète de la fonction pandas crosstab() ici .
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes dans les pandas :
Pandas : Comment utiliser GroupBy et les décomptes de valeurs
Pandas : Comment utiliser GroupBy avec le nombre de bacs
Pandas : Comment compter les valeurs dans une colonne avec condition