es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilizando groupby() para un dataframe en pandas resultó en un Error de índice.

Tengo este dataframe:

      x        y        z        parameter
0     26       24       25       Age
1     35       37       36       Age
2     57       52       54.5     Age
3     160      164      162      Hgt
4     182      163      172.5    Hgt
5     175      167      171      Hgt
6     95       71       83       Wgt
7     110      68       89       Wgt
8     89       65       77       Wgt

Estoy usando pandas para obtener este resultado final:

      x        y        parameter
0     160      164      Hgt
1     182      163      Hgt
2     175      167      Hgt

Estoy usando groupby() para extraer y aislar las filas basadas en el mismo parámetro Hgt del dataframe original.

Primero, agregué una columna para establecerla como un índice:

df = df.insert(0, 'index', [count for count in range(df.shape[0])], True)

Y el dataframe quedó así:

      index    x        y        z        parameter
0     0        26       24       25       Age
1     1        35       37       36       Age
2     2        57       52       54.5     Age
3     3        160      164      162      Hgt
4     4        182      163      172.5    Hgt
5     5        175      167      171      Hgt
6     6        95       71       83       Wgt
7     7        110      68       89       Wgt
8     8        89       65       77       Wgt

Luego, utilicé el siguiente código para agrupar basado en el índice y extraer las columnas que necesito:

df1 = df.groupby('index')[['x', 'y', 'parameter']]

Y la salida fue:

      x        y        parameter
0     26       24       Age
1     35       37       Age
2     57       52       Age
3     160      164      Hgt
4     182      163      Hgt
5     175      167      Hgt
6     95       71       Wgt
7     110      68       Wgt
8     89       65       Wgt

Después de eso, utilicé el siguiente código para aislar solo los valores de Hgt:

df2 = df1[df1['parameter'] == 'Hgt']

Cuando ejecuté df2, obtuve un error que decía:

IndexError: Column(s) ['x', 'y', 'parameter'] already selected

¿Me falta algo aquí? ¿Qué debo hacer para obtener el resultado final?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que df1 todavía contiene todas las columnas, incluyendo “parameter”. Entonces, cuando intentas acceder a “parameter” nuevamente al seleccionar solo los valores de “Hgt”, pandas lo considera una selección duplicada.

    Para solucionar esto, puedes seleccionar primero solo las filas con valores de “Hgt” y luego seleccionar las columnas que necesitas:

    df2 = df[df["parameter"]=="Hgt"][["x","y","parameter"]]

    Esto debería darte el resultado deseado:

          x        y        parameter     
    3     160      164      Hgt           
    4     182      163      Hgt             
    5     175      167      Hgt              
    

Comments are closed.