Estou usando esse quadro de dados:
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
Quero agregar isso por nome e depois por fruta para obter um número total de frutas por nome.
Bob,Apples,16 ( for example )
Tentei agrupar por nome e fruta, mas como obtenho o número total de frutas.
Number
?Além disso, você pode usar a função agg,
fonte
Series
enquanto o outro retorna umGroupBy
objeto.DataFrame
objeto (como na resposta aceita), use colchetes duplos ao redor'Number'
, ou seja:df.groupby(['Name', 'Fruit'])[['Number']].agg('sum')
Se você deseja manter as colunas originais
Fruit
eName
, usereset_index()
. Caso contrário,Fruit
eName
se tornará parte do índice.Como visto nas outras respostas:
fonte
As duas respostas realizam o que você deseja.
Você pode usar a
pivot
funcionalidade para organizar os dados em uma boa tabelafonte
Você pode selecionar colunas diferentes para somar números.
fonte
Você pode definir a
groupby
coluna paraindex
usarsum
comlevel
fonte
Uma variação na função .agg (); fornece a capacidade de (1) persistir o tipo DataFrame, (2) aplicar médias, contagens, somatórios etc. e (3) permite agrupar em várias colunas enquanto mantém a legibilidade.
usando seus valores ...
fonte