Pregunta Combinación de filas en pandas [duplicado]


Esta pregunta ya tiene una respuesta aquí:

Tengo un DataFrame con un índice llamado city_id de ciudades en el formato [city],[state] (p.ej., new york,ny que contiene números enteros en las columnas. El problema es que tengo varias filas para la misma ciudad, y quiero colapsar las filas que comparten una 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.


32
2017-07-03 02:51


origen


Respuestas:


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, el city_id valores) a groupby y le dice que use esos como las teclas de grupo, y el segundo restablece el índice y luego selecciona el city_id columna. Ver esta sección de los documentos para más ejemplos. Tenga en cuenta que hay muchos otros métodos en DataFrameGroupBy objetos, también:

>>> df.groupby(df.index)
<pandas.core.groupby.DataFrameGroupBy object at 0x1045a1790>
>>> 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

41
2017-07-03 04:29



Algo en la misma línea. Lo siento, no es 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()

2
2017-07-03 04:32