根据其他分类列的条件创建新列 [英] Create new column based on condition on other categorical column

查看:81
本文介绍了根据其他分类列的条件创建新列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个如下所示的数据框

I have a dataframe as shown below

Category   Value
A          10
B          22
A          2
C          30
B          23
B          4
C          8
C          24
A          9

我需要根据以下条件创建一个Flag列Flag

I need to create a Flag column Flag based following conditions

If the values of Category A is greater than or equal 5 then Flag=1, else 0
If the values of Category B is greater than or equal 20 then Flag=1, else 0
If the values of Category C is greater than or equal 25 then Flag=1, else 0

预期输出如下图

Category   Value   Flag
A          10      1
B          22      1
A          2       0
C          30      1
B          23      1
B          4       0
C          8       0
C          24      0
A          9       1

我尝试了以下代码

df_['Flag'] = np.where(df_[df_['Category']=='A']['Value']>=5, 1, 0)
df_['Flag'] = np.where(df_[df_['Category']=='B']['Value']>=20, 1, 0)
df_['Flag'] = np.where(df_[df_['Category']=='C']['Value']>=25, 1, 0)

推荐答案

First chain condition by & for bitwise AND 然后 by | 按位OR:

First chain condition by & for bitwise AND and then by | for bitwise OR:

m1 = (df['Category']=='A') & (df['Value']>=5)
m2 = (df['Category']=='B') & (df['Value']>=20)
m3 = (df['Category']=='C') & (df['Value']>=25)

df['Flag'] = np.where(m1 | m2 | m3, 1, 0)
print (df)
  Category  Value  Flag
0        A     10     1
1        B     22     1
2        A      2     0
3        C     30     1
4        B     23     1
5        B      4     0
6        C      8     0
7        C     24     0
8        A      9     1

或者将True/False映射到1/0:

df['Flag'] = (m1 | m2 | m3).astype(int)

这篇关于根据其他分类列的条件创建新列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆