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.
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
Vous pouvez également utiliser la fonction agg,
df.groupby(['Name', 'Fruit'])['Number'].agg('sum')
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
df.groupby(['Fruit','Name'])['Number'].sum()
Vous pouvez sélectionner différentes colonnes pour additionner les nombres.
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
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
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.