Python Pandas: obtenga el índice de filas cuya columna coincide con cierto valor



Answers

Se puede hacer usando la función numpy where ():

import pandas as pd
import numpy as np

In [716]: df = pd.DataFrame({"gene_name": ['SLC45A1', 'NECAP2', 'CLIC4', 'ADC', 'AGBL4'] , "BoolCol": [False, True, False, True, True] },
       index=list("abcde"))

In [717]: df
Out[717]: 
  BoolCol gene_name
a   False   SLC45A1
b    True    NECAP2
c   False     CLIC4
d    True       ADC
e    True     AGBL4

In [718]: np.where(df["BoolCol"] == True)
Out[718]: (array([1, 3, 4]),)

In [719]: select_indices = list(np.where(df["BoolCol"] == True)[0])

In [720]: df.iloc[select_indices]
Out[720]: 
  BoolCol gene_name
b    True    NECAP2
d    True       ADC
e    True     AGBL4

Aunque no siempre necesitas el índice para una coincidencia, pero en el caso de que necesites:

In [796]: df.iloc[select_indices].index
Out[796]: Index([u'b', u'd', u'e'], dtype='object')

In [797]: df.iloc[select_indices].index.tolist()
Out[797]: ['b', 'd', 'e']
Question

Dado un DataFrame con una columna "BoolCol", queremos encontrar los índices del DataFrame en el que los valores de "BoolCol" == True

Actualmente tengo la forma iterativa de hacerlo, que funciona a la perfección:

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 del panda. Después de algunas investigaciones, actualmente estoy usando este código:

df[df['BoolCol'] == True].index.tolist()

Éste me da una lista de índices, pero no coinciden, cuando los reviso haciendo:

df.iloc[i]['BoolCol']

¡El resultado es realmente falso!

¿Cuál sería la forma correcta de Pandas para hacer esto?






Links