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?
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: