Pandas : Comment créer un tableau croisé dynamique avec des pourcentages



Vous pouvez utiliser la syntaxe suivante pour ajouter une colonne à un tableau croisé dynamique dans pandas qui affiche le pourcentage du total pour une colonne spécifique :

my_table['% points'] = (my_table['points']/my_table['points'].sum())*100

Cette syntaxe particulière ajoute une nouvelle colonne appelée % points à un tableau croisé dynamique appelé my_table qui affiche le pourcentage des valeurs totales dans la colonne points .

L’exemple suivant montre comment utiliser cette syntaxe dans la pratique.

Exemple : créer un tableau croisé dynamique Pandas avec des pourcentages

Supposons que nous ayons le DataFrame pandas suivant qui montre le nombre de points marqués par différents joueurs de basket-ball :

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   'position': ['Guard', 'Guard', 'Forward', 'Forward',
                                'Guard', 'Guard', 'Forward', 'Forward'],
                   'points': [22, 30, 14, 15, 19, 30, 23, 20]})

#view DataFrame
print(df)

  team position  points
0    A    Guard      22
1    A    Guard      30
2    A  Forward      14
3    A  Forward      15
4    B    Guard      19
5    B    Guard      30
6    B  Forward      23
7    B  Forward      20

Nous pouvons utiliser la fonction pivot_table() pour créer un tableau croisé dynamique qui montre la somme des points par équipe et position :

#create pivot table to calculate sum of points by team and position
my_table = pd.pivot_table(df, index=['team', 'position'], aggfunc='sum')

#view pivot table
print(my_table)

               points
team position        
A    Forward       29
     Guard         52
B    Forward       43
     Guard         49

À partir du résultat, nous pouvons voir :

  • Les attaquants de l’équipe A ont marqué un total de 29 points.
  • Les gardes de l’équipe A ont marqué un total de 52 points.
  • Les attaquants de l’équipe B ont marqué un total de 43 points.
  • Les gardes de l’équipe B ont marqué un total de 49 points.

Nous pouvons ensuite utiliser la syntaxe suivante pour ajouter une nouvelle colonne appelée % points qui affiche le pourcentage du total de points pour chaque ligne :

#add column that displays points as a percentage of total points
my_table['% points'] = (my_table['points']/my_table['points'].sum())*100

#view updated pivot table
print(my_table)

               points   % points
team position                   
A    Forward       29  16.763006
     Guard         52  30.057803
B    Forward       43  24.855491
     Guard         49  28.323699

La nouvelle colonne % points affiche désormais les valeurs des points en pourcentage du total des points.

Notez également que vous pouvez utiliser la fonction round() pour arrondir les valeurs en pourcentage à un certain nombre de décimales.

#add column that displays points as a percentage of total points (rounded)
my_table['% points'] = round((my_table['points']/my_table['points'].sum())*100, 2)

#view updated pivot table
print(my_table)

               points  % points
team position                  
A    Forward       29     16.76
     Guard         52     30.06
B    Forward       43     24.86
     Guard         49     28.32

Les valeurs en pourcentage sont désormais arrondies à deux décimales.

Remarque : Vous pouvez trouver la documentation complète de la fonction pandas pivot_table() ici .

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans les pandas :

Pandas : Comment ajouter un filtre au tableau croisé dynamique
Pandas : Comment trier le tableau croisé dynamique par valeurs dans la colonne
Pandas : Comment créer un tableau croisé dynamique avec une somme de valeurs

Ajouter un commentaire

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