Wie man eine DataFrame-Spalte basierend auf gegebenen Bedingungen in Pandas erstellt

Suraj Joshi 30 Januar 2023
  1. List Comprehensions zum Erstellen neuer DataFrame-Spalten basierend auf einer gegebenen Bedingung in Pandas
  2. NumPy-Methoden zum Erstellen neuer DataFrame-Spalten auf der Grundlage eines gegebenen Zustands in Pandas
  3. pandas.DataFrame.apply zum Erstellen neuer DataFrame-Spalten auf der Grundlage einer gegebenen Bedingung in Pandas
  4. pandas.Series.map() zum Erstellen neuer DataFrame-Spalten auf der Grundlage einer gegebenen Bedingung in Pandas
Wie man eine DataFrame-Spalte basierend auf gegebenen Bedingungen in Pandas erstellt

Wir können die DataFrame-Spalten basierend auf einer gegebenen Bedingung in Pandas erstellen, indem wir List Comprehensions, NumPy-Methoden, apply()-Methode und map()-Methode des DataFrame-Objekts verwenden.

List Comprehensions zum Erstellen neuer DataFrame-Spalten basierend auf einer gegebenen Bedingung in Pandas

Wir können verschiedene Listen Comprehension verwenden, um neue DataFrame-Spalten basierend auf einer gegebenen Bedingung in Pandas zu erstellen. List Comprehension ist eine Methode, um neue Listen aus iterablen zu erstellen. Sie ist ziemlich schneller und einfacher als andere Methoden.

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)

Ausgabe:

      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

Es erzeugt eine neue Spalte Status in df, deren Wert Senior ist, wenn das Gehalt größer oder gleich 400 ist, oder Junior andernfalls.

NumPy-Methoden zum Erstellen neuer DataFrame-Spalten auf der Grundlage eines gegebenen Zustands in Pandas

Wir können auch NumPy-Methoden verwenden, um eine DataFrame-Spalte basierend auf gegebenen Bedingungen in Pandas zu erstellen. Zu diesem Zweck können wir die np.where() Methode und die np.select() Methode verwenden.

np.where() Methode

np.where() nimmt die Bedingung als Eingabe und gibt die Indizes der Elemente zurück, die die gegebene Bedingung erfüllen. Wir können diese Methode verwenden, um eine DataFrame-Spalte basierend auf gegebenen Bedingungen in Pandas zu erstellen, wenn wir nur eine Bedingung haben.

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)

Ausgabe:

      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) gibt x zurück, wenn die Bedingung erfüllt ist, andernfalls y.

Der obige Code erzeugt eine neue Spalte Status in df, deren Wert Senior ist, wenn die gegebene Bedingung erfüllt ist; andernfalls wird der Wert auf Junior gesetzt.

Methode np.select()

np.where() nimmt Bedingungsliste und Auswahlliste als Eingabe und gibt ein Array zurück, das je nach Bedingung aus Elementen der Auswahlliste aufgebaut ist. Wir können diese Methode verwenden, um eine DataFrame-Spalte basierend auf gegebenen Bedingungen in Pandas zu erstellen, wenn wir zwei oder mehr Bedingungen haben.

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)

Ausgabe:

         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

Wenn hier die erste Bedingung in der conditionlist für eine Zeile erfüllt ist, wird der Wert der Spalte Salary_Range für diese spezifische Zeile auf das erste Element in der choicelist gesetzt. Andere Bedingungen in der conditionlist sind ähnlich. Wenn keine der Bedingungen in der conditionlist erfüllt ist, wird der Wert der Spalte Salary_Range für diese Zeile auf den Wert des Standard-Parameters in der np.where()-Methode gesetzt, z. B. Not Specified.

pandas.DataFrame.apply zum Erstellen neuer DataFrame-Spalten auf der Grundlage einer gegebenen Bedingung in Pandas

pandas.DataFrame.apply gibt einen DataFrame zurück
als Ergebnis der Anwendung der gegebenen Funktion entlang der gegebenen Achse des DataFrame.

Die Syntax:

DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds)

func stellt die anzuwendende Funktion dar.

axis steht für die Achse, entlang der die Funktion angewendet wird. Wir können axis=1 oder axis = 'columns' verwenden, um die Funktion auf jede Zeile anzuwenden.

Wir können diese Methode verwenden, um die Bedingung zu überprüfen und Werte für jede Zeile einer neuen Spalte zu setzen.

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)

Ausgabe:

      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

Hier definieren wir eine Funktion set_values(), die mit df.apply() auf jede Zeile angewendet wird. Die Funktion setzt den Wert jeder Zeile der Spalte Salary_Range in Abhängigkeit vom Wert der Spalte Salary dieser Zeile. Wir machen map_dictionary, um den Wert der Spalte Salary_Range für eine Zeile zuzuweisen, die ihren Wert in der Spalte Salary hat. Diese Methode bietet uns viel mehr Flexibilität, wenn wir eine große Anzahl von Optionen für die neue Spalte haben.

pandas.Series.map() zum Erstellen neuer DataFrame-Spalten auf der Grundlage einer gegebenen Bedingung in Pandas

Wir könnten auch pandas.Series.map() verwenden, um neue DataFrame-Spalten basierend auf einer gegebenen Bedingung in Pandas zu erstellen. Diese Methode wird elementweise für Series angewendet und bildet Werte von einer Spalte auf die andere ab, basierend auf der Eingabe, die ein Dictionary, eine Funktion oder eine Series sein könnte.

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)

Ausgabe:

      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

Es wird eine neue Spalte Salary_Range erstellt und die Werte jeder Zeile der Spalte in Abhängigkeit von den Schlüssel-Werte-Paaren in map_dictionary gesetzt.

Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Verwandter Artikel - Pandas DataFrame Column

Verwandter Artikel - Pandas Condition