Como criar uma coluna DataFrame com base em uma determinada condição em Pandas
-
Compreensão de lista para criar novas colunas
DataFrame
com base em uma determinada condição em Pandas - Métodos para criar novas colunas de dados com base em uma determinada condição em Pandas
-
pandas.DataFrame.apply
para criar novas colunasDataFrame
baseadas em uma determinada condição em Pandas -
pandas.Series.map()
para criar novas colunasDataFrame
com base em uma determinada condição em Pandas
Podemos criar as colunas DataFrame
com base em uma dada condição em Pandas utilizando técnicas de compreensão de lista, métodos NumPy
, método apply()
e método map()
do objeto DataFrame.
Compreensão de lista para criar novas colunas DataFrame
com base em uma determinada condição em Pandas
Podemos utilizar várias compreensões de listas para criar novas colunas DataFrame
com base em uma determinada condição em Pandas. A compreensão de listas é um método para criar novas listas a partir de iterables. É bastante mais rápido e simples do que outros 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)
Resultado:
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
Cria uma nova coluna Status
em df
cujo valor é Senior
se o salário for maior ou igual a 400, ou Junior
caso contrário.
Métodos para criar novas colunas de dados com base em uma determinada condição em Pandas
Também podemos utilizar os métodos NumPy para criar uma coluna DataFrame
com base em determinadas condições em Pandas. Podemos utilizar o método np.where()
e o método np.select()
para este fim.
np.where()
Método
np.where()
toma a condição como uma entrada e retorna os índices de elementos que satisfazem a condição dada. Podemos utilizar este método para criar uma coluna DataFrame com base em determinadas condições em Pandas quando temos apenas uma condição.
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)
Resultado:
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(condition, x, y)
retorna x
se a condição for atendida, caso contrário y
.
O código acima cria uma nova coluna Status
em df
cujo valor é Senior
se a condição dada for satisfeita; caso contrário, o valor é definido como Junior
.
np.select()
Método
np.where()
toma a lista de condições e lista de escolha como uma entrada e retorna uma array construída a partir de elementos da lista de escolha, dependendo das condições. Podemos utilizar este método para criar uma coluna DataFrame com base em determinadas condições em Pandas quando temos duas ou mais condições.
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)
Resultado:
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
Aqui, se a primeira condição na conditionlist
for satisfeita para uma linha, o valor da coluna Salary_Range
para essa linha específica é definido para o 1º elemento na choicelist
. Outras condições na conditionlist
são similares. Se nenhuma das condições na lista de condições
for satisfeita, o valor da coluna Salary_Range
para aquela linha é definido para o valor do parâmetro default
no método np.where()
, por exemplo, Not Specified
.
pandas.DataFrame.apply
para criar novas colunas DataFrame
baseadas em uma determinada condição em Pandas
pandas.DataFrame.apply
retorna um DataFrame
como resultado da aplicação da função dada ao longo do eixo dado do DataFrame.
Sintaxe:
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds)
func
representa a função a ser aplicada.
axis
representa o eixo ao longo do qual a função é aplicada. Podemos utilizar axis=1
ou axis = 'columns'
para aplicar a função a cada linha.
Podemos utilizar este método para verificar a condição e definir valores para cada linha de uma nova coluna.
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)
Resultado:
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
Aqui, definimos uma função set_values()
que é aplicada a cada linha utilizando df.apply()
. A função define o valor de cada linha da coluna Salary_Range
, dependendo do valor da coluna Salary
dessa linha. Fazemos o map_dictionary
para atribuir qual será o valor da coluna Salary_Range
para uma linha dado seu valor na coluna Salary
. Este método nos proporciona muito mais flexibilidade quando temos um grande número de opções para a nova coluna.
pandas.Series.map()
para criar novas colunas DataFrame
com base em uma determinada condição em Pandas
Também poderíamos utilizar pandas.Series.map()
para criar novas colunas DataFrame
com base em uma determinada condição em Pandas. Este método é aplicado elementarmente para Series
e mapeia valores de uma coluna para a outra com base na entrada que poderia ser um dicionário, função, ou 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)
Resultado:
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
Ele cria uma nova coluna Salary_Range
e define os valores de cada linha da coluna dependendo dos pares de valores chave no map_dictionary
.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedInArtigo relacionado - Pandas DataFrame Column
- Como obter os cabeçalhos da coluna Pandas DataFrame como uma lista
- Como eliminar a coluna Pandas DataFrame
- Como Converter a Coluna DataFrame para DataTempo em Pandas
- Como obter a Soma da Coluna Pandas
- Como mudar a ordem das colunas Pandas DataFrame
- Como converter a coluna DataFrame em String em Pandas