Créer une colonne de DataFrame en fonction d'une condition donnée dans Pandas

Suraj Joshi 30 janvier 2023
  1. Compréhension de liste pour créer de nouvelles colonnes DataFrame basées sur une condition donnée dans les Pandas
  2. Méthodes NumPy pour créer de nouvelles colonnes DataFrame basées sur une condition donnée dans Pandas
  3. pandas.DataFrame.apply pour créer de nouvelles colonnes DataFrame basées sur une condition donnée dans Pandas
  4. Pour créer de nouvelles colonnes DataFrame basées sur une condition donnée dans Pandas
Créer une colonne de DataFrame en fonction d'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.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Article connexe - Pandas DataFrame Column