Pandas:使用多个 if else 条件创建新列
您可以使用以下语法在 pandas DataFrame 中使用多个 if else 条件创建新列:
#define conditions conditions = [ (df[' column1 '] == ' A ') & (df[' column2 '] < 20 ), (df[' column1 '] == ' A ') & (df[' column2 '] >= 20 ), (df[' column1 '] == ' B ') & (df[' column2 '] < 20 ), (df[' column1 '] == ' B ') & (df[' column2 '] >= 20 ) ] #define results results = [' result1 ', ' result2 ', ' result3 ', ' result4 '] #create new column based on conditions in column1 and column2 df[' new_column '] = np. select (conditions, results)
此特定示例创建一个名为new_column的列,其值基于 DataFrame 中的column1和column2的值。
以下示例展示了如何在实践中使用此语法。
示例:在 Pandas 中使用多个 If else 条件创建新列
假设我们有以下 pandas DataFrame,其中包含有关各种篮球运动员的信息:
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], ' points ': [15, 18, 22, 24, 12, 17, 20, 28]}) #view DataFrame print (df) team points 0 to 15 1 to 18 2 to 22 3 to 24 4 B 12 5 B 17 6 B 20 7 B 28
现在假设我们要创建一个名为class的新列,该列将每个玩家分为以下四组之一:
- Bad_A如果球队是 A 并且得分 < 20
- Good_A如果球队为 A 且得分 ≥ 20
- Bad_B如果球队是 B 并且得分 < 20
- Good_B如果球队为 B 且得分 ≥ 20
我们可以使用以下语法来做到这一点:
import numpy as np #define conditions conditions = [ (df[' team '] == ' A ') & (df[' points '] < 20 ), (df[' team '] == ' A ') & (df[' points '] >= 20 ), (df[' team '] == ' B ') & (df[' points '] < 20 ), (df[' team '] == ' B ') & (df[' points '] >= 20 ) ] #define results results = [' Bad_A ', ' Good_A ', ' Bad_B ', ' Good_B '] #create new column based on conditions in column1 and column2 df[' class '] = np. select (conditions, results) #view updated DataFrame print (df) team points class 0 A 15 Bad_A 1 A 18 Bad_A 2 A 22 Good_A 3 A 24 Good_A 4 B 12 Bad_B 5 B 17 Bad_B 6 B 20 Good_B 7 B 28 Good_B
名为“等级”的新列根据球队和积分列中的值显示每个玩家的排名。
注意:您可以在此处找到 NumPy select()函数的完整文档。
其他资源
以下教程解释了如何在 pandas 中执行其他常见任务:
Pandas:如何根据条件创建布尔列
Pandas:如何计算有条件的列中的值
Pandas:如何使用 Groupby 和有条件计数