Cómo filtrar filas de DataFrames en función de los valores de columna en Pandas

Suraj Joshi 30 enero 2023
  1. Seleccione filas de pandas en función del valor de columna específico
  2. Seleccione filas de Pandas que no contengan un valor de columna específico
  3. Seleccione filas de Pandas con valores de columna mayores o menores que el valor específico
  4. Seleccione filas de pandas en función de los valores de varias columnas
  5. Seleccione filas de DataFrame con varias condiciones
Cómo filtrar filas de DataFrames en función de los valores de columna en Pandas

Podemos seleccionar filas de DataFrame en función de valores de columna única o múltiple. También podemos obtener filas de DataFrame que satisfacen o no satisfacen una o más condiciones. Esto se puede lograr utilizando el método de indexación booleana, indexación posicional, indexación de etiquetas y query().

Seleccione filas de pandas en función del valor de columna específico

Podemos seleccionar filas de pandas de un DataFrame que contiene o no contiene el valor específico para una columna. Es ampliamente utilizado en el filtrado del DataFrame basado en el valor de la columna.

Seleccione filas de Pandas que contengan un valor de columna específico

Filtrar mediante indexación booleana

En la indexación booleana, al principio generamos una máscara que es solo una serie de valores booleanos que representan si la columna contiene el elemento específico o no.

df_mask = df["col_name"] == "specific_value"

Luego aplicamos esta máscara a nuestro DataFrame original para filtrar los valores requeridos.

filtered_df = df[df_mask]

Esto devuelve el DataFrame filtrado que contiene solo filas que tienen el valor_específico para la columna col_name.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] == 300
filtered_df = df[df_mask]
print(filtered_df)

Producción :

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

Esto da todas las filas en el df cuyos valores de Sales son 300.

Filtrar mediante indexación posicional

Es similar a la indexación booleana pero implica un paso adicional. En este método, primero creamos una máscara booleana y luego encontramos posiciones en las que la máscara booleana tiene el valor True. Luego usamos pasar todas las posiciones con el valor True en la máscara al método iloc() para que solo se seleccionen todas las filas deseadas.

import pandas as pd
import numpy as np

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] == 300
positions = np.flatnonzero(df_mask)
filtered_df = df.iloc[positions]
print(filtered_df)

Producción :

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

Esto también da todas las filas en el df cuyos valores de Sales son 300.

Pandas encadenando

También podemos usar Pandas Chaining para filtrar el filtro de DataFrame de pandas por valor de columna. En este método, utilizamos pandas.DataFrame.eq() método para la columna DataFrame cuyos valores deben verificarse para comparar la igualdad de elementos en DataFrame.

import pandas as pd
import numpy as np

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

filtered_df = df[df.Sales.eq(300)]
print(filtered_df)

Producción :

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

pandas.DataFrame.query()

Podríamos usar pandas.DataFrame.query() para seleccionar filas por valor de columna en Pandas.

import pandas as pd
import numpy as np

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

filtered_df = df.query("Sales == 300")
print(filtered_df)

Producción :

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

Si deseamos actualizar el DataFrame existente, podemos establecer inplace=True en el método de consulta.

Seleccione filas de Pandas que no contengan un valor de columna específico

El método para seleccionar filas Pandas que no contienen un valor de columna específico es similar al de seleccionar filas Pandas con un valor de columna específico. Lo único que necesitamos cambiar es la condición de que la columna no contenga un valor específico simplemente reemplazando == con != Al crear máscaras o consultas.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] != 300
filtered_df = df[df_mask]
print(filtered_df)

Producción :

       Date  Sales  Price
0  April-10    200      3
2  April-12    400      2
3  April-13    200      4

Esto selecciona todas las filas de df cuyos valores de Ventas no son 300.

Seleccione filas de Pandas con valores de columna mayores o menores que el valor específico

Para seleccionar filas Pandas con valores de columna mayores o menores que un valor específico, utilizamos operadores como >, <=, >= al crear máscaras o consultas.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

df_mask = df["Sales"] >= 300
filtered_df = df[df_mask]
print(filtered_df)

Producción :

       Date  Sales  Price
1  April-11    300      1
2  April-12    400      2
4  April-14    300      3
5  April-16    300      2

Esto da como resultado DataFrame con valores de Sales mayores o iguales que 300.

Seleccione filas de pandas en función de los valores de varias columnas

Hemos introducido métodos para seleccionar filas basadas en valores específicos de columna en DataFrame. En esta sección, analizaremos los métodos para seleccionar las filas de Pandas en función de los valores de varias columnas.

Seleccione filas de Pandas que contengan cualquiera de los valores de múltiples columnas

Para seleccionar filas de Pandas que contengan cualquiera de los valores de múltiples columnas, utilizamos pandas.DataFrame.isin(values) que devuelve DataFrame de booleanos que muestra si cada elemento en el DataFrame está contenido o no en valores. El DataFrame de booleanos así obtenido puede usarse para seleccionar filas.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

values = [200, 400]
filtered_df = df[df.Sales.isin(values)]
print(filtered_df)

Producción :

       Date  Sales  Price
0  April-10    200      3
2  April-12    400      2
3  April-13    200      4

Filtra todas las filas de DataFrame cuyo valor de Sales es 200 o 400.

Seleccione filas de Pandas que no contengan ninguno de los múltiples valores de columna especificados

Para seleccionar las filas de un DataFrame que no contiene ninguno de los múltiples valores de columna especificados, negaremos el DataFrame de booleanos devuelto por pandas.DataFrame.isin(values) colocando el signo ~ en la parte delantera.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

values = [200, 400]
filtered_df = df[~df.Sales.isin(values)]
print(filtered_df)

Producción :

       Date  Sales  Price
1  April-11    300      1
4  April-14    300      3
5  April-16    300      2

Filtra todas las filas de DataFrame cuyo valor de Sales no es ni 200 ni 400.

Seleccione filas de DataFrame con varias condiciones

Si queremos filtrar filas considerando los valores de fila de varias columnas, creamos múltiples condiciones y las combinamos con operadores &. Ahora, la fila solo se selecciona cuando cumple las condiciones para todas las columnas.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
sales = [200, 300, 400, 200, 300, 300]
prices = [3, 1, 2, 4, 3, 2]

df = pd.DataFrame({"Date": dates, "Sales": sales, "Price": prices})

values_1 = [200, 400]
values_2 = [2, 3]
filtered_df = df[df.Sales.isin(values_1) & ~df.Price.isin(values_2)]
print(filtered_df)

Producción :

       Date  Sales  Price
3  April-13    200      4

Filtra todas las filas de DataFrame cuyo valor de Sales es 200 o 400 y el valor de Price no es ni 2 ni 3. La fila de la salida solo cumple ambas condiciones en el DataFrame completo.

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Artículo relacionado - Pandas DataFrame

Artículo relacionado - Pandas DataFrame Row