Créer une colonne de DataFrame en fonction d'une condition donnée dans Pandas
-
Compréhension de liste pour créer de nouvelles colonnes
DataFrame
basées sur une condition donnée dans les Pandas -
Méthodes NumPy pour créer de nouvelles colonnes
DataFrame
basées sur une condition donnée dans Pandas -
pandas.DataFrame.apply
pour créer de nouvelles colonnesDataFrame
basées sur une condition donnée dans Pandas -
Pour créer de nouvelles colonnes
DataFrame
basées sur une condition donnée dans Pandas
Nous pouvons créer les colonnes DataFrame
basées sur une condition donnée dans les Pandas en utilisant la compréhension de liste, les méthodes NumPy, la méthode apply()
et la méthode map()
de l’objet DataFrame.
Compréhension de liste pour créer de nouvelles colonnes DataFrame
basées sur une condition donnée dans les Pandas
Nous pouvons utiliser diverses listes de compréhension pour créer de nouvelles colonnes DataFrame
basées sur une condition donnée dans Pandas. La compréhension de liste est une méthode pour créer de nouvelles listes à partir d’itérables. Elle est plus rapide et plus simple que les autres méthodes.
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)
Production :
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
Il crée une nouvelle colonne Status
dans df
dont la valeur est Senior
si le salaire est supérieur ou égal à 400, ou Junior
sinon.
Méthodes NumPy pour créer de nouvelles colonnes DataFrame
basées sur une condition donnée dans Pandas
Nous pouvons également utiliser les méthodes NumPy pour créer une colonne DataFrame
basée sur des conditions données dans Pandas. Nous pouvons utiliser la méthode np.where()
et la méthode np.select()
à cette fin.
Méthode np.where()
np.where()
prend la condition comme entrée et renvoie les indices des éléments qui satisfont à la condition donnée. Nous pouvons utiliser cette méthode pour créer une colonne DataFrame basée sur des conditions données dans les Pandas lorsque nous n’avons qu’une seule condition.
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)
Production :
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)
renvoie x
si la condition est remplie, sinon y
.
Le code ci-dessus crée une nouvelle colonne Status
dans df
dont la valeur est Senior
si la condition donnée est satisfaite, sinon la valeur est fixée à Junior
.
Méthode np.select()
np.where()
prend en entrée condition-list et choice-list et retourne un tableau construit à partir des éléments de la choice-list, en fonction des conditions. Nous pouvons utiliser cette méthode pour créer une colonne DataFrame basée sur des conditions données dans les Pandas lorsque nous avons deux conditions ou plus.
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)
Production :
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
Ici, si la 1ère condition dans la conditionlist
est satisfaite pour une ligne, la valeur de la colonne Salary_Range
pour cette ligne spécifique est fixée au 1er élément dans la choicelist
. Les autres conditions dans la conditionlist
sont similaires. Si aucune des conditions de la conditionlist
n’est satisfaite, la valeur de la colonne Salary_Range
pour cette ligne est fixée à la valeur du paramètre default
dans de la méthode np.where()
, par exemple, Not Specified
.
pandas.DataFrame.apply
pour créer de nouvelles colonnes DataFrame
basées sur une condition donnée dans Pandas
pandas.DataFrame.apply
renvoie un DataFrame
par l’application de la fonction donnée le long de l’axe donné du DataFrame.
Syntaxe :
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds)
func représente la fonction à appliquer.
L’axe représente l’axe le long duquel la fonction est appliquée. Nous pouvons utiliser axis=1
ou axis = 'columns'
pour appliquer la fonction à chaque ligne.
Nous pouvons utiliser cette méthode pour vérifier la condition et fixer des valeurs pour chaque ligne d’une nouvelle colonne.
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)
Production :
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
Ici, nous définissons une fonction set_values()
qui est appliquée à chaque ligne en utilisant df.apply()
. La fonction fixe la valeur de chaque ligne de la colonne Salaire_Etendue
en fonction de la valeur de la colonne Salary
de cette ligne. Nous faisons un map_dictionary
pour assigner ce qui sera la valeur de la colonne Salary_Range
pour une ligne donnée étant donné sa valeur dans la colonne Salary
. Cette méthode nous donne beaucoup plus de flexibilité lorsque nous avons un grand nombre d’options pour la nouvelle colonne.
Pour créer de nouvelles colonnes DataFrame
basées sur une condition donnée dans Pandas
Nous pourrions également utiliser pandas.Series.map()
pour créer de nouvelles colonnes DataFrame
basées sur une condition donnée dans Pandas. Cette méthode est appliquée par élément pour Series
et fait correspondre les valeurs d’une colonne à l’autre en fonction de l’entrée qui pourrait être un dictionnaire, une fonction 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)
Production :
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
Il crée une nouvelle colonne Salary_Range
et fixe les valeurs de chaque ligne de la colonne en fonction des paires clé-valeur dans map_dictionary
.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedInArticle connexe - Pandas DataFrame Column
- Comment obtenir les en-têtes de colonne de Pandas DataFrame sous forme de liste
- Comment supprimer une colonne de Pandas DataFrame
- Comment convertir la colonne DataFrame en date-heure dans Pandas
- Comment obtenir la somme de la colonne Pandas
- Comment changer l'ordre des colonnes de Pandas DataFrame
- Comment convertir une colonne de DataFrame en chaîne de caractères dans Pandas