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.
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
Aussi, vous pouvez utiliser la fonction agg,
df.groupby(['Name', 'Fruit'])['Number'].agg('sum')
Si vous souhaitez conserver les colonnes d'origine Fruit
et Name
, utilisez reset_index()
. Sinon, Fruit
et Name
feront partie de l'index.
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
Les deux autres réponses accomplissent ce que vous voulez.
Vous pouvez utiliser la fonctionnalité pivot
pour organiser les données dans une table Nice.
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 des 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
Vous pouvez définir la colonne groupby
sur index
, puis utiliser sum
avec level
.
df.set_index(['Fruit','Name']).sum(level=[0,1])
Out[175]:
Number
Fruit Name
Apples Bob 16
Mike 9
Steve 10
Oranges Bob 67
Tom 15
Mike 57
Tony 1
Grapes Bob 35
Tom 87
Tony 15
Cette réponse ne sert qu'à comprendre comment fonctionnent groupby et sum.
J'utilise l'ensemble de données "Les précipitations en Inde de 1900 à 2015"
Mon jeu de données comprend des colonnes telles que "subdivision" et "annuelle".
Donc, je voudrais ici calculer la somme des précipitations annuelles pour chaque subdivision.
Total = Data.groupby('SUBDIVISION')['ANNUAL'].sum()
print (Total)
c'est ainsi que les sous-divisions seront regroupées et nous obtiendrons la somme des précipitations annuelles par subdivision.