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

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *