Combinando filas en pandas

Tengo un DataFrame con un índice llamado city_id de ciudades en el formato [city],[state] (por ejemplo, new york,ny contiene recuentos de enteros en las columnas. El problema es que tengo varias filas para la misma ciudad, y I quiero colapsar las filas que comparten un city_id agregando sus valores de columna. Miré groupby() pero no fue inmediatamente obvio cómo aplicarlo a este problema.

Editar:

Un ejemplo: me gustaría cambiar esto:

 city_id val1 val2 val3 houston,tx 1 2 0 houston,tx 0 0 1 houston,tx 2 1 1 

dentro de esto:

 city_id val1 val2 val3 houston,tx 3 3 2 

Si hay ~ 10-20k filas.

Empezando desde

 >>> df val1 val2 val3 city_id houston,tx 1 2 0 houston,tx 0 0 1 houston,tx 2 1 1 somewhere,ew 4 3 7 

yo podría hacer

 >>> df.groupby(df.index).sum() val1 val2 val3 city_id houston,tx 3 3 2 somewhere,ew 4 3 7 

o

 >>> df.reset_index().groupby("city_id").sum() val1 val2 val3 city_id houston,tx 3 3 2 somewhere,ew 4 3 7 

El primer enfoque pasa los valores de índice (en este caso, los valores de city_id ) a groupby y le dice que los use como claves de grupo, y el segundo restablece el índice y luego selecciona la columna city_id . Vea esta sección de la documentación para más ejemplos. Tenga en cuenta que también hay muchos otros métodos en los objetos DataFrameGroupBy :

 >>> df.groupby(df.index)  >>> df.groupby(df.index).max() val1 val2 val3 city_id houston,tx 2 2 1 somewhere,ew 4 3 7 >>> df.groupby(df.index).mean() val1 val2 val3 city_id houston,tx 1 1 0.666667 somewhere,ew 4 3 7.000000 

Algo en la misma línea. Lo sentimos, no la réplica exacta.

 mydata = [{'subid' : 'B14-111', 'age': 75, 'fdg':1.78}, {'subid' : 'B14-112', 'age': 22, 'fdg':1.56},{'subid' : 'B14-112', 'age': 40, 'fdg':2.00},] df = pandas.DataFrame(mydata) gg = df.groupby("subid",sort=True).sum()