我有如下所示的数据框。它有分类列(带),其层次结构从 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/