306 votes

Pandas groupés par et somme

J'utilise ce cadre de données:

 Fruit   Date      Name  Number
Apples  10/6/2016 Bob    7
Apples  10/6/2016 Bob    8
Apples  10/6/2016 Mike   9
Apples  10/7/2016 Steve 10
Apples  10/7/2016 Bob    1
Oranges 10/7/2016 Bob    2
Oranges 10/6/2016 Tom   15
Oranges 10/6/2016 Mike  57
Oranges 10/6/2016 Bob   65
Oranges 10/7/2016 Tony   1
Grapes  10/7/2016 Bob    1
Grapes  10/7/2016 Tom   87
Grapes  10/7/2016 Bob   22
Grapes  10/7/2016 Bob   12
Grapes  10/7/2016 Tony  15
 

Je veux regrouper ceci par nom puis par fruit pour obtenir un nombre total de fruits par nom.

 Bob,Apples,16 ( for example )
 

J'ai essayé de regrouper par nom et par fruit mais comment puis-je obtenir le nombre total de fruits.

330voto

Steven G Points 5522

utiliser la méthode sum ()

 df.groupby(['Fruit','Name']).sum()

Out[31]: 
               Number
Fruit   Name         
Apples  Bob        16
        Mike        9
        Steve      10
Grapes  Bob        35
        Tom        87
        Tony       15
Oranges Bob        67
        Mike       57
        Tom        15
        Tony        1
 

221voto

Saurabh Points 1871

Aussi, vous pouvez utiliser la fonction agg,

 df.groupby(['Name', 'Fruit'])['Number'].agg('sum')
 

149voto

Gazala Muhamed Points 131

Si vous souhaitez conserver les colonnes d'origine Fruit et Name , utilisez reset_index() . Sinon, Fruit et Name feront partie de l’indice.

 df.groupby(['Fruit','Name'])['Number'].sum().reset_index()

Fruit   Name       Number
Apples  Bob        16
Apples  Mike        9
Apples  Steve      10
Grapes  Bob        35
Grapes  Tom        87
Grapes  Tony       15
Oranges Bob        67
Oranges Mike       57
Oranges Tom        15
Oranges Tony        1
 

Comme on le voit dans les autres réponses:

 df.groupby(['Fruit','Name'])['Number'].sum()

               Number
Fruit   Name         
Apples  Bob        16
        Mike        9
        Steve      10
Grapes  Bob        35
        Tom        87
        Tony       15
Oranges Bob        67
        Mike       57
        Tom        15
        Tony        1
 

55voto

Demetri P Points 1875

Les deux autres réponses accomplissent ce que vous voulez.

Vous pouvez utiliser la fonctionnalité pivot pour organiser les données dans une belle table

 df.groupby(['Fruit','Name'],as_index = False).sum().pivot('Fruit','Name').fillna(0)



Name    Bob     Mike    Steve   Tom    Tony
Fruit                   
Apples  16.0    9.0     10.0    0.0     0.0
Grapes  35.0    0.0     0.0     87.0    15.0
Oranges 67.0    57.0    0.0     15.0    1.0
 

25voto

jared Points 111
 df.groupby(['Fruit','Name'])['Number'].sum()
 

Vous pouvez sélectionner différentes colonnes pour additionner des nombres.

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