Crea colonna DataFrame in base alla condizione data in Pandas
-
Comprensione dell’lista per creare nuove colonne
DataFrame
in base a una determinata condizione in Pandas -
Metodi NumPy per creare nuove colonne
DataFrame
in base a una determinata condizione in Pandas -
pandas.DataFrame.apply
per creare nuove colonneDataFrame
in base a una determinata condizione in Pandas -
pandas.Series.map()
per creare nuove colonneDataFrame
basate su una determinata condizione in Pandas
Possiamo creare le colonne DataFrame
basate su una data condizione in Pandas usando la comprensione della lista, i metodi NumPy, il metodo apply()
e il metodo map()
dell’oggetto DataFrame.
Comprensione dell’lista per creare nuove colonne DataFrame
in base a una determinata condizione in Pandas
Possiamo utilizzare varie Comprensione delle liste per creare nuove colonne DataFrame
basate su una data condizione in Pandas. La comprensione degli liste è un metodo per creare nuovi liste da iterabili. È abbastanza più veloce e più semplice di altri metodi.
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)
Produzione:
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
Crea una nuova colonna Status
in df
il cui valore è Senior
se lo stipendio è maggiore o uguale a 400, altrimenti Junior
.
Metodi NumPy per creare nuove colonne DataFrame
in base a una determinata condizione in Pandas
Possiamo anche usare i metodi NumPy per creare una colonna DataFrame
basata su determinate condizioni in Pandas. Possiamo utilizzare il metodo np.where()
e il metodo np.select()
per questo scopo.
Metodo np.where()
np.where()
accetta la condizione come input e restituisce gli indici degli elementi che soddisfano la condizione data. Possiamo usare questo metodo per creare una colonna DataFrame basata su determinate condizioni in Pandas quando abbiamo una sola condizione.
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)
Produzione:
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)
restituisce x
se la condizione è soddisfatta, altrimenti y
.
Il codice precedente crea una nuova colonna Status
in df
il cui valore è Senior
se la condizione data è soddisfatta; in caso contrario, il valore è impostato su Junior
.
Metodo np.select()
np.where()
accetta condition-list e choice-list come input e restituisce un array costruito dagli elementi in choice-list, a seconda delle condizioni. Possiamo utilizzare questo metodo per creare una colonna DataFrame basata su determinate condizioni in Pandas quando abbiamo due o più condizioni.
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)
Produzione:
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
Qui, se la prima condizione nella conditionlist
è soddisfatta per una riga, il valore della colonna Salary_Range
per quella specifica riga è impostato al primo elemento nella choicelist
. Altre condizioni nella conditionlist
sono simili. Se nessuna delle condizioni nella conditionlist
è soddisfatta, il valore della colonna Salary_Range
per quella riga è impostato sul valore del parametro default
nel metodo np.where()
, ad esempio, Not Specified
.
pandas.DataFrame.apply
per creare nuove colonne DataFrame
in base a una determinata condizione in Pandas
pandas.DataFrame.apply
restituisce un DataFrame
come risultato dell’applicazione della funzione data lungo l’asse specificato del DataFrame.
Sintassi:
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds)
func
rappresenta la funzione da applicare.
axis
rappresenta l’asse lungo il quale viene applicata la funzione. Possiamo usare axis=1
o axis = 'columns'
per applicare la funzione a ciascuna riga.
Possiamo utilizzare questo metodo per verificare la condizione e impostare i valori per ogni riga di una nuova colonna.
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)
Produzione:
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
Qui, definiamo una funzione set_values()
che viene applicata a ogni riga usando df.apply()
. La funzione imposta il valore di ogni riga della colonna Salary_Range
a seconda del valore della colonna Salary
di quella riga. Creiamo map_dictionary
per assegnare quello che sarà il valore della colonna Salary_Range
per una riga dato il suo valore nella colonna Salary
. Questo metodo ci fornisce molta più flessibilità quando abbiamo un gran numero di opzioni per la nuova colonna.
pandas.Series.map()
per creare nuove colonne DataFrame
basate su una determinata condizione in Pandas
Potremmo anche usare pandas.Series.map()
per creare nuove colonne DataFrame
basate su una data condizione in Pandas. Questo metodo viene applicato in modo elementare per Series
e mappa i valori da una colonna all’altra in base all’input che potrebbe essere un dizionario, una funzione o una 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)
Produzione:
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
Crea una nuova colonna Salary_Range
e imposta i valori di ogni riga della colonna a seconda delle coppie chiave-valore in map_dictionary
.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedInArticolo correlato - Pandas DataFrame Column
- Come ottenere le intestazioni delle colonne DataFrame Pandas come lista
- Come cancellare la colonna DataFrame Pandas DataFrame
- Come convertire la colonna DataFrame in data e ora in pandas
- Ottieni la colonna della somma dei pandas
- Modificare l'ordine delle colonne DataFrame di Pandas
- Converti colonna DataFrame in stringa in Pandas