Python Pandas: Obtener el índice de las filas cuya columna coincide con un valor determinado
Dado un DataFrame con una columna "BoolCol", queremos encontrar los índices del DataFrame en los que los valores de "BoolCol" == True
Actualmente tengo la forma de iterar para hacerlo, que funciona perfectamente:
for i in range(100,3000):
if df.iloc[i]['BoolCol']== True:
print i,df.iloc[i]['BoolCol']
Pero esta no es la forma correcta de hacerlo panda's. Después de algunas investigaciones, actualmente estoy usando este código:
df[df['BoolCol'] == True].index.tolist()
Este me da una lista de índices, pero no coinciden, cuando los compruebo haciendo:
df.iloc[i]['BoolCol']
¡¡El resultado es realmente Falso!!
¿Cuál sería la forma correcta de Pandas para hacer esto?
220
3
df.iloc[i]
devuelve laésima
fila dedf
. i" no se refiere a la etiqueta del índice, "i" es un índice basado en 0.En cambio, el atributo
index
devuelve etiquetas de índice reales, no índices numéricos de fila:o de forma equivalente,
Puede ver la diferencia con bastante claridad si juega con un DataFrame con un índice no predeterminado que no es igual a la posición numérica de la fila':
Si quieres usar el índice,
entonces puede seleccionar las filas utilizando
loc
en lugar deiloc
:Tenga en cuenta que
loc
también puede aceptar matrices booleanas:Si tienes una matriz booleana,
máscara
, y necesitas valores de índice ordinal, puedes calcularlos usandonp.flatnonzero
:Utiliza
df.iloc
para seleccionar filas por índice ordinal:Se puede hacer usando la función numpy where():
Aunque no siempre se necesita el índice para una coincidencia, pero por si acaso:
En primer lugar, puede comprobar
query
cuando la columna de destino es de tipobool
(PS: acerca de cómo utilizarlo por favor consulte enlace )Después de filtrar el df original por la columna booleana podemos escoger el índice .
También los pandas tienen
nonzero
, simplemente seleccionamos la posición de la filaTrue
y con ella cortamos elDataFrame
oindex