Comment créer une colonne DataFrame basée sur une condition donnée dans Pandas

  1. Liste de compréhension pour créer de nouvelles colonnes DataFrame basées sur une condition donnée dans 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. pandas.Series.map() pour créer de nouvelles colonnes DataFrame basées sur une condition donnée dans Pandas

Nous pouvons créer les colonnes DataFrame en fonction d’une condition donnée dans 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.

Liste de compréhension pour créer de nouvelles colonnes DataFrame basées sur une condition donnée dans 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 des listes est une méthode pour créer de nouvelles listes à partir d’itérables. C’est bien 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 Statut 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() à cet effet.

Méthode np.where()

np.where() prend la condition en entrée et retourne 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 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) retourne 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 définie sur Junior.

Méthode np.select()

np.where() prend la liste de conditions et la liste de choix comme entrée et retourne un tableau construit à partir des éléments de la liste de choix, selon les conditions. Nous pouvons utiliser cette méthode pour créer une colonne DataFrame basée sur des conditions données dans 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 de la liste de conditions est satisfaite pour une ligne, la valeur de la colonne Salary_Range pour cette ligne spécifique est définie sur le 1er élément de la liste de choix. Les autres conditions de la liste de conditions sont similaires. Si aucune des conditions de la liste de conditions n’est remplie, la valeur de la colonne Salary_Range pour cette ligne est définie sur la valeur du paramètre default dans 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 retourne un DataFrame à la suite de 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.

axis représente l’axe le long duquel la fonction est appliquée. Nous pouvons utiliser axis = 1 ou axis = 'columns' pour appliquer une fonction à chaque ligne.

Nous pouvons utiliser cette méthode pour vérifier la condition et définir 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 définit la valeur de chaque ligne de la colonne Salary_Range en fonction de la valeur de la colonneSalary de cette ligne. Nous faisons map_dictionary pour assigner quelle sera la valeur de la colonneSalary_Range pour une ligne étant donné sa valeur dans la colonne Salary. Cette méthode nous offre beaucoup plus de flexibilité lorsque nous avons un grand nombre d’options pour la nouvelle colonne.

pandas.Series.map() 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 un nouveau DataFrame colonnes basées sur une condition donnée dans Pandas. Cette méthode est appliquée par élément pour Series et mappe 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 définit les valeurs de chaque ligne de la colonne en fonction des paires clé-valeur dans map_dictionary.

Article connexe - Pandas Column

  • Comment obtenir l'index de toutes les lignes dont la colonne particulière satisfait la condition donnée dans Pandas
  • Combiner deux colonnes de texte dans DataFrame in Pandas
  • Article connexe - Pandas Condition

  • Comment obtenir l'index de toutes les lignes dont la colonne particulière satisfait la condition donnée dans Pandas