Pandas : Comment ajouter des sous-totaux au tableau croisé dynamique
Souvent, vous souhaiterez peut-être ajouter des sous-totaux à un tableau croisé dynamique pandas.
Heureusement, cela est facile à faire en utilisant les fonctions intégrées aux pandas.
L’exemple suivant montre comment procéder.
Exemple : ajouter des sous-totaux au tableau croisé dynamique Pandas
Supposons que nous ayons le DataFrame pandas suivant qui contient des informations sur divers joueurs de basket-ball :
import pandas as pd #create DataFrame df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], 'position': ['G', 'G', 'F', 'F', 'G', 'F', 'F', 'F'], 'all_star': ['Y', 'N', 'Y', 'Y', 'N', 'N', 'N', 'Y'], 'points': [4, 4, 6, 8, 9, 5, 5, 12]}) #view DataFrame print(df) team position all_star points 0 A G Y 4 1 A G N 4 2 A F Y 6 3 A F Y 8 4 B G N 9 5 B F N 5 6 B F N 5 7 B F Y 12
Nous pouvons utiliser le code suivant pour créer un tableau croisé dynamique dans pandas qui affiche la somme des points pour chaque combinaison de team , all_star et position dans le DataFrame :
#create pivot table
my_table = pd.pivot_table(df, values='points',
index=['team', 'all_star'],
columns='position',
aggfunc='sum')
#view pivot table
print(my_table)
position F G
team all_star
A N NaN 4.0
Y 14.0 4.0
B N 10.0 9.0
Y 12.0 NaN
Supposons maintenant que nous souhaitions ajouter une ligne de sous-totaux qui affiche le sous-total des points pour chaque équipe et position.
Nous pouvons utiliser la syntaxe suivante pour ce faire :
#add subtotals row to pivot table
pd.concat([
y.append(y.sum().rename((x, 'Total')))
for x, y in my_table.groupby(level=0)
]).append(my_table.sum().rename(('Grand', 'Total')))
position F G
team all_star
A N NaN 4.0
Y 7.0 4.0
Total 7.0 8.0
B N 5.0 9.0
Y 12.0 NaN
Total 17.0 9.0
Grand Total 24.0 17.0
Nous avons maintenant deux lignes de sous-total qui montrent le sous-total des points pour chaque équipe et position, ainsi qu’une ligne de total général qui montre le total général de chaque colonne.
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 créer un tableau croisé dynamique avec le nombre de valeurs
Pandas : comment remplacer les valeurs NaN dans le tableau croisé dynamique par des zéros
Pandas : Comment convertir un tableau croisé dynamique en DataFrame