Quiero obtener un cierto subconjunto de columnas (definido por rango de índice) de filas filtradas por otro valor de columna. Mi marco de datos:

   A   B   C   D
0  11  b1  c1  d1
1  33  b2  c2  d2
2  22  b3  c3  d3

Aquí puedo obtener todas las columnas de filas por un criterio de columna:

df[df['A'] == 33]

Además, puedo obtener ciertas columnas de todas las filas por índice:

df.iloc[:,0:2]

Ahora quiero combinar los dos a lo largo de esta lógica (esto no funciona):

df[df['A'] == 33, 0:2]
1
Hendrik 14 nov. 2017 a las 17:48

2 respuestas

La mejor respuesta

Puede seleccionar columnas indexando con DataFrame.loc:

print (df.columns[0:2])
Index(['A', 'B'], dtype='object')

df = df.loc[df['A'] == 33, df.columns[0:2]]
print (df)

    A   B
1  33  b2

Porque:

df = df.iloc[df['A'] == 33, 0:2]

NotImplementedError: la indexación booleana basada en iLocation en un tipo entero no está disponible

0
jezrael 14 nov. 2017 a las 14:56

Podemos combinarlos juntos :-)

df.loc[df['A'] == 33].iloc[:,0:2]
Out[464]: 
    A   B
1  33  b2

O

df.iloc[(df['A'] == 33).nonzero()[0],0:2]
Out[471]: 
    A   B
1  33  b2
0
YOBEN_S 14 nov. 2017 a las 14:54