Saltar al contenido

4 formas de seleccionar filas de un DataFrame según los valores de las columnas

Solución:

Hay varias formas de seleccionar filas de un marco de datos de Pandas:

  1. Indexación booleana (DataFrame[DataFrame[‘col’] == valor])
  2. Indexación posicional (DataFrame.iloc[…])
  3. Indexación de etiquetas (DataFrame.xs (…))
  4. API DataFrame.query (…)

A continuación les muestro ejemplos de cada uno, con consejos sobre cuándo utilizar determinadas técnicas. Supongamos que nuestro criterio es la columna ‘A’ == ‘barra’

Configuración

Lo primero que necesitaremos es identificar una condición que actuará como nuestro criterio para seleccionar filas. Empezaremos con el caso del OP. column_name == some_valuee incluyen algunos otros casos de uso comunes.

Un ejemplo sería:


import pandas as pd, numpy as np

df = pd.DataFrame({
    'A':
    'Contrary bar popular bar Lorem bar Ipsum is not simply'.split(),
    'B':
    'Lorem Ipsum comes from sections one two three four five'.split(),
    'C':
    np.arange(10),
    'D':
    np.arange(10) * 2
})

print(df)

Producción:

          A         B  C   D
0  Contrary     Lorem  0   0
1       bar     Ipsum  1   2
2   popular     comes  2   4
3       bar      from  3   6
4     Lorem  sections  4   8
5       bar       one  5  10
6     Ipsum       two  6  12
7        is     three  7  14
8       not      four  8  16
9    simply      five  9  18

Método 1: indexación booleana (DataFrame[DataFrame[‘col’] == valor]) #

Esta es una de las formas más sencillas de realizar esta tarea y si el rendimiento o la intuición no son un problema, este debería ser su método elegido. Sin embargo, si el rendimiento es un problema, es posible que desee considerar una forma alternativa de crear la máscara.

mask = df['A'] == 'bar'
print(mask)

Producción:

     A      B  C   D
1  bar  Ipsum  1   2
3  bar   from  3   6
5  bar    one  5  10

Método 2: indexación posicional (DataFrame.iloc[…]) #

Indexación posicional (DataFrame.iloc[…]) tiene sus casos de uso, pero este no es uno de ellos. Para identificar dónde dividir, primero debemos realizar el mismo análisis booleano que hicimos anteriormente. Esto nos deja realizando un paso adicional para lograr la misma tarea.

mask = df['A'] == 'bar'
pos = np.flatnonzero(mask)
print(df.iloc[pos])

Salida igual que el método anterior:

     A      B  C   D
1  bar  Ipsum  1   2
3  bar   from  3   6
5  bar    one  5  10

Método 3: indexación de etiquetas (DataFrame.xs (…)) #

La indexación de etiquetas puede ser muy útil, pero en este caso, nuevamente estamos trabajando más sin ningún beneficio.

res = df.set_index('A', append=True, drop=False).xs('bar', level=1)

print(res)

Salida igual que los métodos anteriores:

     A      B  C   D
1  bar  Ipsum  1   2
3  bar   from  3   6
5  bar    one  5  10

Método 4: DataFrame.query (…) API #

pd.DataFrame.query es una forma muy elegante / intuitiva de realizar esta tarea, pero suele ser más lenta. Sin embargo, si presta atención a los siguientes tiempos, para datos grandes, la consulta es muy eficiente. Más que el enfoque estándar y de similar magnitud como mi mejor sugerencia.

res = df.query('A == "bar"')

print(res)

Salida igual que los métodos anteriores:

     A      B  C   D
1  bar  Ipsum  1   2
3  bar   from  3   6
5  bar    one  5  10
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *