Estoy usando este marco de datos:
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?
Number
?También puedes usar la función agg,
fuente
Series
mientras que el otro devuelve unGroupBy
objeto.DataFrame
objeto en su lugar (como en la respuesta aceptada), use corchetes dobles'Number'
, es decir:df.groupby(['Name', 'Fruit'])[['Number']].agg('sum')
Si desea mantener las columnas originales
Fruit
yName
, usereset_index()
. De lo contrarioFruit
, yName
pasarán a formar parte del índice.Como se ve en las otras respuestas:
fuente
Las otras dos respuestas logran lo que quieres.
Puede usar la
pivot
funcionalidad para organizar los datos en una buena tablafuente
Puede seleccionar diferentes columnas para sumar números.
fuente
Puede configurar la
groupby
columna paraindex
luego usarsum
conlevel
fuente
Una variación de la función .agg (); proporciona la capacidad de (1) persistir el DataFrame tipo, (2) aplicar promedios, recuentos, sumas, etc. y (3) habilita groupby en varias columnas mientras mantiene la legibilidad.
usando tus valores ...
fuente