Pregunta de principiante Parece que debería ser una operación sencilla, pero no puedo entenderlo leyendo los documentos.

Tengo un df con esta estructura:

|integer_id|int_field_1|int_field_2|

La columna integer_id no es única, por lo que me gustaría agrupar el df por integer_id y sumar los dos campos.

El SQL equivalente es:

SELECT integer_id, SUM(int_field_1), SUM(int_field_2) FROM tbl
GROUP BY integer_id

¿Alguna sugerencia sobre la forma más sencilla de hacer esto?

EDITAR: Incluyendo entrada / salida

Input:  
integer_id  int_field_1 int_field_2   
2656        36          36  
2656        36          36  
9702        2           2  
9702        1           1  

Salida usando df.groupby ('enteros'). Sum ():

integer_id  int_field_1 int_field_2  
2656        72          72  
9702        3           3  
7
acpigeon 28 ago. 2014 a las 00:05

3 respuestas

La mejor respuesta

Solo necesita llamar a sum en un objeto groupby:

df.groupby('integer_id').sum()

Consulte los docs para obtener más ejemplos.

10
EdChum - Reinstate Monica 27 ago. 2014 a las 20:42

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.

df.groupby(['att1', 'att2']).agg({'att1': "count", 'att3': "sum",'att4': 'mean'})

Usando tus valores ...

df.groupby(['integer_id']).agg({'int_field_1': "sum", 'int_field_2': "sum" })
0
xxyjoel 2 feb. 2020 a las 08:32

Puedes hacerlo

data.groupby(by=['account_ID'])['purchases'].sum()
1
Bastin Robin 26 jun. 2015 a las 09:42