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