Pandas agrupadas y sums

Estoy usando este dataframe:

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 

Quiero agregar esto por nombre y luego por fruta para obtener un número total de frutas por nombre.

 Bob,Apples,16 ( for example ) 

Intenté agrupar por nombre y fruta, pero ¿cómo obtengo la cantidad total de fruta?

usa el método 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 

También puedes usar la función agg,

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

Si desea mantener las columnas originales Fruit y Name , use reset_index() . De lo contrario, Fruit y Name pasarán a formar parte del índice.

 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 

Como se ve en las otras respuestas:

 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 

Las otras dos respuestas logran lo que quieres.

Puede usar la funcionalidad de pivot para organizar los datos en una buena mesa

 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() 

Puede seleccionar diferentes columnas para sumr números.

Puedes usar groupby y 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 

Esta respuesta solo para entender cómo funciona groupby y sum.

Estoy usando el conjunto de datos “Lluvia en la India desde 1900 hasta 2015”

Mi conjunto de datos incluye columnas como “subdivisión” y “anual”.

Entonces, aquí me gustaría calcular la sum de la precipitación anual para cada subdivisión.

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

así es como se agrupará la subdivisión y obtendremos la sum de la precipitación anual por subdivisión.

Puede configurar la columna groupby para index luego usar sum con 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