2 votes

Comment faire pivoter avec une agrégation de premier et de deuxième niveau sur une même table

Comment puis-je pivoter avec une agrégation de premier et de second niveau dans la même table, c'est-à-dire Catégorie et Sous-catégorie

Voici mes données

Nom       Catégorie   Sous-catégorie   somme
yuew       Nourriture       Snack          100
dhjs       Nourriture       Snack          50
jdsd       Nourriture       Boisson          60
kjkd       Nourriture       Boisson          60
sjdbk      Nourriture       Snack          70
ndkbjd     Vêtements    Chemise          80
ndcb       Vêtements    Pantalon       80
dbkjd      Vêtements    Chemise          90

J'essaye de coder

table_pivot = table.pivot_table(values='sum',index=['Catégorie','Sous-catégorie'],aggfunc=np.sum)

Voici le Résultat, résultat spécifique seulement sur la somme de chaque Sous-catégorie

Catégorie                    Sous-catégorie      Somme
Nourriture                        Snack             220
                            Boisson             120
Vêtements                     Chemise             170
                            Pantalon           80

Ce dont j'ai besoin est un résultat qui n'est pas seulement spécifique à la somme de chaque Sous-catégorie mais aussi au niveau de la Catégorie

Catégorie                    Sous-catégorie      Somme
Nourriture                                       340
                            Snack            220
                            Boisson          120
Vêtements                                      250 
                            Chemise          170
                            Pantalon        80

Comment puis-je faire cela

1voto

jezrael Points 290608

Utilisez sum par niveau de premier niveau d'abord, puis créez MultiIndex, append à l'original et enfin sort_index :

df = table_pivot.sum(level=0)
df = df.set_index([df.index.values, [''] * len(df)])
print (df)
                       sum
Catégorie Sous-Catégorie     
Vêtements                250
Nourriture               340

df = table_pivot.append(df).sort_index()
print (df)
                       sum
Catégorie Sous-Catégorie     
Vêtements                250
         Chemise         170
         Pantalon        80
Nourriture               340
         Boisson         120
         Casse-croûte    220

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X