如何基于 Pandas 中的给定条件创建 DataFrame 列

  1. 列表推导以根据 Pandas 中的给定条件创建新的 DataFrame
  2. NumPy 方法根据 Pandas 中的给定条件创建新的 DataFrame 列
  3. pandas.DataFrame.apply 根据 Pandas 中的给定条件创建新的 DataFrame 列
  4. pandas.Series.map() 根据 Pandas 中的给定条件创建新的 DataFrame 列

我们可以使用 DataFrame 对象的列表推导,NumPy 方法,apply() 方法和 map() 方法根据 Pandas 中的给定条件创建 DataFrame 列。

风水2023年的颜色提示 fs
风水2023年的颜色提示 fs

列表推导以根据 Pandas 中的给定条件创建新的 DataFrame

我们可以根据 Pandas 中的给定条件,利用各种列表推导来创建新的 DataFrame 列。列表推导是一种从可迭代对象创建新列表的方法。它比其他方法更快,更简单。

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)

输出:

      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

如果 Salary 大于或等于 400,它将在 df 中创建一个新列 Status,其值将为 Senior,否则为 Junior

NumPy 方法根据 Pandas 中的给定条件创建新的 DataFrame 列

我们还可以使用 NumPy 方法根据 Pandas 中的给定条件创建一个 DataFrame 列。为此,我们可以使用 np.where() 方法和 np.select() 方法。

np.where() 方法

np.where() 将条件作为输入并返回满足给定条件的元素的索引。当我们只有一个条件时,可以使用此方法根据 Pandas 中的给定条件创建 DataFrame 列。

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)

输出:

      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) 返回 x,否则返回 y。

如果满足给定条件,上面的代码将在 df 中创建一个新列 Status,其值为 Senior。否则,将该值设置为初级。

np.select() 方法

np.where()将条件列表和选择列表作为输入,并根据条件返回从选择列表中的元素构建的数组。当我们有两个或多个条件时,可以使用此方法根据 Pandas 中的给定条件创建 DataFrame 列。

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)

输出:

         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

这里,如果满足条件列表中的第一个条件的行,则该特定行的列 Salary_Range 的值将被设置为选择列表中的第一个元素。条件列表中的其他条件类似。如果不满足条件列表中的任何条件,则将该行的 Salary_Range 列的值设置为 np.where() 方法中的默认参数的值,例如,Not Specified

pandas.DataFrame.apply 根据 Pandas 中的给定条件创建新的 DataFrame 列

pandas.DataFrame.apply 返回一个 DataFrame 沿 DataFrame 的给定轴应用给定函数的结果。

语法:

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

func 代表要应用的函数。

axis 代表应用该函数的轴。我们可以使用 axis=1axis = 'columns' 将函数应用于每一行。

我们可以使用此方法检查条件并为新列的每一行设置值。

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)

输出:

      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

在这里,我们定义了一个函数 set_values(),该函数使用 df.apply() 应用于每一行。该函数根据该行的 Salary 列的值来设置 Salary_Range 列的每一行的值。我们建立了一个 map_dictionary 来根据 Salary 列中的数据来决定 Salary_Range 列的数值。当新列有很多选项时,此方法为我们提供了更大的灵活性。

pandas.Series.map() 根据 Pandas 中的给定条件创建新的 DataFrame 列

我们也可以使用 pandas.Series.map() 创建新的 DataFrame 列基于 Pandas 中的给定条件。该方法适用于系列的元素方式,并根据可能是字典,函数或系列的输入将值从一列映射到另一列。

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)

输出:

      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

它创建一个新列 Salary_Range,并根据 map_dictionary 中的键值对设置该列每一行的值。

相关文章 - Pandas DataFrame Column

  • 如何将 Pandas DataFrame 列标题获取为列表
  • 如何删除 Pandas DataFrame 列
  • 如何在 Pandas 中将 DataFrame 列转换为日期时间
  • 如何获得 Pandas 列中元素总和
  • 相关文章 - Pandas Condition

  • 如何将 Pandas DataFrame 列标题获取为列表
  • 如何删除 Pandas DataFrame 列
  • 如何在 Pandas 中将 DataFrame 列转换为日期时间
  • 如何获得 Pandas 列中元素总和