Cómo crear una columna DataFrame basada en una condición dada en Pandas
-
Lista de comprensión para crear nuevas columnas
DataFrame
basadas en una condición dada en Pandas -
Métodos
NumPy
para crear nuevas columnasDataFrame
basadas en una condición dada en Pandas -
pandas.DataFrame.apply
para crear nuevas columnasDataFrame
basadas en una condición dada en Pandas -
pandas.Series.map()
para crear nuevas columnasDataFrame
basadas en una condición dada en Pandas
Podemos crear las columnas DataFrame
basadas en una condición dada en Pandas utilizando la comprensión de la lista, los métodos NumPy
, el método apply()
y el método map()
del objeto DataFrame.
Lista de comprensión para crear nuevas columnas DataFrame
basadas en una condición dada en Pandas
Podemos utilizar varias listas de comprensión para crear nuevas columnas DataFrame
basadas en una condición dada en Pandas. La comprensión de listas es un método para crear nuevas listas a partir de iterables. Es bastante más rápido y sencillo que otros métodos.
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
df["Status"] = ["Senior" if s >= 400 else "Junior" for s in df["Salary"]]
print(df)
Producción :
Name Joined date Salary Status
0 Hisila 2019-11-20 200 Junior
1 Shristi 2020-01-02 400 Senior
2 Zeppy 2020-02-05 300 Junior
3 Alina 2020-03-10 500 Senior
4 Jerry 2020-04-16 600 Senior
5 Kevin 2020-05-01 300 Junior
Crea una nueva columna Status
en df
cuyo valor es Senior
si el salario es mayor o igual a 400, o Junior
de lo contrario.
Métodos NumPy
para crear nuevas columnas DataFrame
basadas en una condición dada en Pandas
También podemos usar los métodos NumPy para crear una columna DataFrame
basada en condiciones dadas en Pandas. Podemos utilizar el método np.where()
y el método np.select()
para este propósito.
Método np.where()
np.where()
toma la condición como una entrada y devuelve los índices de elementos que satisfacen la condición dada. Podemos usar este método para crear una columna DataFrame basada en condiciones dadas en Pandas cuando tenemos una sola condición.
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
df["Status"] = np.where(df["Salary"] >= 400, "Senior", "Junior")
print(df)
Producción :
Name Joined date Salary Status
0 Hisila 2019-11-20 200 Junior
1 Shristi 2020-01-02 400 Senior
2 Zeppy 2020-02-05 300 Junior
3 Alina 2020-03-10 500 Senior
4 Jerry 2020-04-16 600 Senior
5 Kevin 2020-05-01 300 Junior
np.where(condtion, x, y)
devuelve x
si se cumple la condición, de lo contrario, y
.
El código anterior crea una nueva columna Status
en df
cuyo valor es Senior
si se cumple la condición dada; de lo contrario, el valor se establece en Junior
.
Método np.select()
np.where()
toma la lista de condiciones y la lista de opciones como entrada y devuelve un array construida a partir de elementos en la lista de opciones, dependiendo de las condiciones. Podemos usar este método para crear una columna DataFrame basada en condiciones dadas en Pandas cuando tenemos dos o más condiciones.
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
conditionlist = [
(df["Salary"] >= 500),
(df["Salary"] >= 300) & (df["Salary"] < 300),
(df["Salary"] <= 300),
]
choicelist = ["High", "Mid", "Low"]
df["Salary_Range"] = np.select(conditionlist, choicelist, default="Not Specified")
print(df)
Producción :
Name Joined date Salary Salary_Range
0 Hisila 2019-11-20 200 Low
1 Shristi 2020-01-02 400 black
2 Zeppy 2020-02-05 300 Low
3 Alina 2020-03-10 500 High
4 Jerry 2020-04-16 600 High
5 Kevin 2020-05-01 300 Low
Aquí, si se cumple la primera condición de la lista de condiciones
para una fila, el valor de la columna Salary_Range
para esa fila específica se establece en el primer elemento de la lista de selección
. Otras condiciones en la lista de condiciones
son similares. Si no se cumple ninguna de las condiciones en la lista de condiciones
, el valor de la columna Salary_Range
para esa fila se establece en el valor del parámetro default
en el método np.where()
, por ejemplo, Not Specified
.
pandas.DataFrame.apply
para crear nuevas columnas DataFrame
basadas en una condición dada en Pandas
pandas.DataFrame.apply
devuelve un DataFrame
como resultado de aplicar la función dada a lo largo del eje dado del DataFrame.
Sintaxis:
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds)
func
representa la función que se aplicará.
axis
representa el eje a lo largo del cual se aplica la función. Podemos usar axis=1
o axis = 'columns'
para aplicar la función a cada fila.
Podemos usar este método para verificar la condición y establecer valores para cada fila de una nueva columna.
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
def set_values(row, value):
return value[row]
map_dictionary = {200: "Low", 300: "LOW", 400: "MID", 500: "HIGH", 600: "HIGH"}
df["Salary_Range"] = df["Salary"].apply(set_values, args=(map_dictionary,))
print(df)
Producción :
Name Joined date Salary Salary_Range
0 Hisila 2019-11-20 200 Low
1 Shristi 2020-01-02 400 MID
2 Zeppy 2020-02-05 300 LOW
3 Alina 2020-03-10 500 HIGH
4 Jerry 2020-04-16 600 HIGH
5 Kevin 2020-05-01 300 LOW
Aquí, definimos una función set_values()
que se aplica a cada fila usando df.apply()
. La función establece el valor de cada fila de la columna Salary_Range
dependiendo del valor de la columna Salario
de esa fila. Hacemos map_dictionary
para asignar cuál será el valor de la columna Salary_Range
para una fila dado su valor en la columna Salary
. Este método nos proporciona mucha más flexibilidad cuando tenemos una gran cantidad de opciones para la nueva columna.
pandas.Series.map()
para crear nuevas columnas DataFrame
basadas en una condición dada en Pandas
También podríamos usar pandas.Series.map()
para crear un nuevo DataFrame
columnas basadas en una condición dada en Pandas. Este método se aplica por elementos para Series
y asigna valores de una columna a otra en función de la entrada que podría ser un diccionario, función o Series
.
import pandas as pd
import numpy as np
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
map_dictionary = {200: "Low", 300: "LOW", 400: "MID", 500: "HIGH", 600: "HIGH"}
df["Salary_Range"] = df["Salary"].map(map_dictionary)
print(df)
Producción :
Name Joined date Salary Salary_Range
0 Hisila 2019-11-20 200 Low
1 Shristi 2020-01-02 400 MID
2 Zeppy 2020-02-05 300 LOW
3 Alina 2020-03-10 500 HIGH
4 Jerry 2020-04-16 600 HIGH
5 Kevin 2020-05-01 300 LOW
Crea una nueva columna Salary_Range
y establece los valores de cada fila de la columna en función de los pares clave-valor en map_dictionary
.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedInArtículo relacionado - Pandas DataFrame Column
- Cómo obtener las cabeceras de columna de Pandas DataFrame como una lista
- Cómo borrar la columna de Pandas DataFrame
- Cómo convertir la columna del DataFrame a Datetime en Pandas
- Cómo obtener la suma de la columna de Pandas
- Cómo cambiar el orden de las columnas Pandas DataFrame
- Cómo convertir la columna del DataFrame en cadena en los pandas