Obtener el índice de las filas cuya columna coincide con el valor específico en los pandas

Sathiya Sarathi 30 enero 2023
  1. Obtener índices de filas que contengan números enteros/flotaciones en Pandas
  2. Obtener índices de filas que contengan cadenas en Pandas
Obtener el índice de las filas cuya columna coincide con el valor específico en los pandas

Este artículo demuestra cómo obtener el índice de filas que coincide con ciertos criterios en Pandas.

La necesidad de encontrar los índices de las filas es importante en la ingeniería de características. Estas habilidades pueden ser útiles para eliminar los valores atípicos o anormales en un Dataframe. Los índices, también conocidos como etiquetas de filas, pueden encontrarse en los Pandas utilizando varias funciones. En los siguientes ejemplos, trabajaremos en el DataFrame creado utilizando el siguiente fragmento.

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))

print(df)

Resultado:

     A   B   C   D
0   13  16   1   4
1    4   8  10  19
2    5   7  13   2
3    7   8  15  18
4    6  14   9  10
5   17   6  16  16
6    1  19   4  18
7   15   8   1   2
8   10   1  11   4
9   12  19   3   1
10   1   5   6   7
11   9  18  16   5
12  10  11   2   2
13   8  10   4   7
14  12  15  19   1
15  15   4  13  11
16  12   5   7   5
17  16   4  13   5
18   9  15  16   4
19  16  14  17  18

Obtener índices de filas que contengan números enteros/flotaciones en Pandas

La función pandas.DataFrame.loc puede acceder a filas y columnas por sus etiquetas/nombres. Es sencillo devolver las filas que coinciden con la condición booleana dada pasada como etiqueta. Fíjese en los corchetes junto a df.loc en el recorte.

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))

print(df.loc[df["B"] == 19])

Las filas correspondientes a la condición booleana se devuelven como salida en el formato de un Dataframe.

Resultado:

    A   B  C   D
6   1  19  4  18
9  12  19  3   1

Se pueden encadenar múltiples condiciones y aplicarlas juntas a la función, como se muestra a continuación. Esto ayuda a aislar las filas en base a condiciones específicas.

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))

print(df.loc[(df["B"] == 19) | (df["C"] == 19)])

Resultado:

     A   B   C   D
6    1  19   4  18
9   12  19   3   1
14  12  15  19   1

Obtener el índice de filas con pandas.DataFrame.index()

Si quieres encontrar sólo los índices coincidentes del dataframe que satisfaga la condición booleana pasada como argumento, pandas.DataFrame.index() es la forma más fácil de conseguirlo.

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))

print(df.index[df["B"] == 19].tolist())

En el fragmento anterior, las filas de la columna A que coinciden con la condición booleana == 1 se devuelven como salida como se muestra a continuación.

Resultado:

[6, 9]

La razón por la que ponemos tolist() detrás del método index() es para convertir el Index a la lista; de lo contrario, el resultado es del tipo de datos Int64Index.

Int64Index([6, 9], dtype='int64'

La recuperación de sólo los índices se puede hacer en base a múltiples condiciones también. El fragmento puede escribirse de la siguiente manera:

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(1, 20, size=(20, 4)), columns=list("ABCD"))

print(df.index[(df["B"] == 19) | (df["C"] == 19)].tolist())

Resultado:

[6, 9, 14]

Obtener índices de filas que contengan cadenas en Pandas

Los valores de la cadena pueden ser comparados en base a dos métodos. Los dos métodos mostrados en la sección anterior funcionarán, excepto por el cambio de condición.

En los siguientes ejemplos, utilizaremos el siguiente fragmento.

import pandas as pd

df = pd.DataFrame(
    {
        "Name": ["blue", "delta", "echo", "charlie", "alpha"],
        "Type": ["Raptors", "Raptors", "Raptors", "Raptors", "Tyrannosaurus rex"],
    }
)

print(df)

Resultado:

      Name               Type
0     blue            Raptors
1    delta            Raptors
2     echo            Raptors
3  charlie            Raptors
4    alpha  Tyrannosaurus rex

Obtener el índice de filas con la coincidencia exacta de la cadena

La condición de igualdad usada en la sección anterior puede ser usada para encontrar la coincidencia exacta de la cadena en el Dataframe. Buscaremos las dos cadenas.

import pandas as pd

df = pd.DataFrame(
    {
        "Name": ["blue", "delta", "echo", "charlie", "alpha"],
        "Type": ["Raptors", "Raptors", "Raptors", "Raptors", "Tyrannosaurus rex"],
    }
)

print(df.index[(df["Name"] == "blue")].tolist())
print("\n")
print(df.loc[df["Name"] == "blue"])
print("\n")
print(df.loc[(df["Name"] == "charlie") & (df["Type"] == "Raptors")])

Resultado:

[0]

   Name     Type
0  blue  Raptors

      Name     Type
3  charlie  Raptors

Como se ha visto anteriormente, tanto el índice como las filas que coinciden con la condición pueden ser recibidas.

Obtener el índice de filas con la coincidencia parcial de cadenas

Los valores de la cadena pueden ser parcialmente igualados encadenando el dataframe a la función str.contains. En el siguiente ejemplo, buscaremos la cadena ha en charlie y alpha.

import pandas as pd

df = pd.DataFrame(
    {
        "Name": ["blue", "delta", "echo", "charlie", "alpha"],
        "Type": ["Raptors", "Raptors", "Raptors", "Raptors", "Tyrannosaurus rex"],
    }
)

print(df.index[df["Name"].str.contains("ha")].tolist())
print("\n")
print(df.loc[df["Name"].str.contains("ha")])
print("\n")
print(df.loc[(df["Name"].str.contains("ha")) & (df["Type"].str.contains("Rex"))])

Resultado:

[3, 4]

      Name               Type
3  charlie            Raptors
4    alpha  Tyrannosaurus rex


    Name               Type
4  alpha  Tyrannosaurus rex

Esta función puede ser muy útil para realizar una coincidencia parcial de la cadena a través de múltiples columnas del dataframe.

Artículo relacionado - Pandas DataFrame

Artículo relacionado - Pandas DataFrame Row