J'utilise ce bloc 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 fruit, mais comment obtenir le nombre total de fruits.
Number
?Vous pouvez également utiliser la fonction agg,
la source
Series
tandis que l'autre renvoie unGroupBy
objet.DataFrame
objet à la place (comme dans la réponse acceptée), utilisez des crochets doubles autour'Number'
, c'est-à-dire:df.groupby(['Name', 'Fruit'])[['Number']].agg('sum')
Si vous souhaitez conserver les colonnes d'origine
Fruit
etName
, utilisezreset_index()
. Sinon,Fruit
ilName
fera partie de l'index.Comme on le voit dans les autres réponses:
la source
Les deux autres réponses accomplissent ce que vous voulez.
Vous pouvez utiliser la
pivot
fonctionnalité pour organiser les données dans un joli tableaula source
Vous pouvez sélectionner différentes colonnes pour additionner les nombres.
la source
Vous pouvez définir la
groupby
colonne pourindex
ensuite utilisersum
aveclevel
la source
Une variation sur la fonction .agg (); offre la possibilité (1) de conserver le type DataFrame, (2) d'appliquer des moyennes, des comptes, des sommations, etc. et (3) permet de grouper sur plusieurs colonnes tout en conservant la lisibilité.
en utilisant vos valeurs ...
la source