Groupe Pandas-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 agréger cela 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.

48
demandé sur mit 2016-10-07 20:36:25

7 réponses

Utilisez 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
61
répondu Steven G 2017-10-02 16:20:13

Vous pouvez également utiliser la fonction agg,

df.groupby(['Name', 'Fruit'])['Number'].agg('sum')
25
répondu Saurabh 2016-10-08 11:40:26

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
12
répondu Demetri P 2016-10-07 18:35:14
df.groupby(['Fruit','Name'])['Number'].sum()

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

6
répondu jared 2018-03-11 00:29:59

Vous pouvez utiliser groupby et sum:

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

               Number
Name  Fruit          
Bob   Apples       16
      Grapes       35
      Oranges      67
Mike  Apples        9
      Oranges      57
Steve Apples       10
Tom   Grapes       87
      Oranges      15
Tony  Grapes       15
      Oranges       1
5
répondu Batsu 2016-10-07 17:44:57

Si vous voulez 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
4
répondu Gazala Muhamed 2018-07-02 10:01:31

Cette réponse seulement pour comprendre comment groupby et sum fonctionne.

J'utilise l'ensemble de données "précipitations en Inde depuis 1900 à 2015"

Mon jeu de données comprend des colonnes comme "subdivision" et "annuel".

Donc, ici, je voudrais calculer la somme des précipitations annuelles pour chaque subdivision.

Total = Data.groupby('SUBDIVISION')['ANNUAL'].sum()
print (Total)

Voici comment subdivision obtiendrez regroupés et nous somme des précipitations annuelles par subdivision.

0
répondu vaibhav pawar 2018-08-03 10:06:32