python - 如何在 pandas 中的情况下对分类变量应用逻辑比较

标签 python python-3.x pandas dataframe

我有如下所示的数据框。它有分类列(带),其层次结构从 0、G1、G2、G3 到 G4,其中 G4 最高。

我想在 pandas 中重写以下 SQL 逻辑

CASE
         WHEN Band = '00' THEN access.Y
         WHEN Band = 'G1' THEN acess.X +200
         WHEN Band >= 'G2' THEN acess.X +access.Y

       END  As Result
       From access

数据框

Band    X   Y     Result
00     200  2100    2100
G1     300  2300    500
G2     200  5000    5200
G3     150  6000    6150
00     250  2500    2500
G1     400  6000    600
G2     300  6000    6300
G4     500  4500    5000

如何在 python 中完成此操作?

最佳答案

您需要pd.Categorical在这里(对于处理分类排序和比较的一般情况)能够在分类系列中使用比较运算符,例如 >=,然后使用 np.select 用于使用 if,elif,else 条件。

df['Band'] = pd.Categorical(df['Band'],categories=['00','G1','G2','G3','G4'],ordered=True)

df['result']=np.select([df['Band']=='00',df['Band']=='G1',df['Band']>='G1']
                       ,[df['Y'],df['X']+200,df['X'].add(df['Y'])])
print(df)
<小时/>
  Band    X     Y  Result  result
0   00  200  2100    2100    2100
1   G1  300  2300    2600     500
2   G2  200  5000    5200    5200
3   G3  150  6000    6150    6150
4   00  250  2500    2500    2500
5   G1  400  6000    6400     600
6   G2  300  6000    6300    6300
7   G4  500  4500    5000    5000

详情: 如果我们现在打印该系列,我们将能够看到招聘结构:

print(df['Band'])

0    00
1    G1
2    G2
3    G3
4    00
5    G1
6    G2
7    G4
Name: Band, dtype: category
Categories (5, object): [00 < G1 < G2 < G3 < G4]

关于python - 如何在 pandas 中的情况下对分类变量应用逻辑比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59746038/

相关文章:

python - Flask:无法访问静态文件夹中的文件(404)

python - 如何将确切的单词与正则表达式 python 匹配?

python - 在不使用 for 循环的情况下重新格式化数据框

python - 如何根据条件替换字符串中的单词?

python - 从一列字符串中提取整数

python - 不区分大小写的用户输入字符串

python - 如何使用 pandas 模块合并(即 'concat' )100+ .csv 文件?

python - 使用 2 个数据帧的 IP 列和日期范围用 df2 中的数据填充 df1 数据帧

python - 为什么 Xtick 标签没有对齐?

python - Pandas - 删除包含 Nan 的行,然后删除任何关联的行