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 中的column1column2的值。

以下示例展示了如何在实践中使用此语法。

示例:在 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 和有条件计数

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注