基于多个条件的熊猫新变量

时间:2018-11-02 05:17:30

标签: pandas

我花了两天时间进行搜索,对您的帮助将不胜感激。

尝试根据其他列中的值创建c_flg。

a_flg    b_flg    Count    c_flg (Expected Output)
False    True       3      False
True     False      2      False
False    False      4      True

a_flg和b_flg是strs,Count是一个整数

从两个角度进行尝试,都没有成功。

方法1:

df['c_flg'] = np.where((df[(df['a_flg'] == 'False') & 
(df['b_flg'] == 'False') &
(df['Count'] <= 6 )]), 'True', 'False')

ValueError:值的长度与索引的长度不匹配

方法2:

def test_func(df):
    if (('a_flg' == 'False') & 
    ('b_flg' == 'False') &

    ('Count' <= 6 )):
        return True

    else:
       return False


df['c_flg']=df.apply(test_func, axis=1)


TypeError: ('unorderable types: str() <= int()', 'occurred at index 0')

Python语言的新手,将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果我正确地理解了您的问题,那么您需要这个,

df['c_flg']=(df['a_flg']=='False')&(df['b_flg']=='False')&(df['Count']<=6)
df['c_flg']=(df['a_flg']==False)&(df['b_flg']==False)&(df['Count']<=6)#use this if 'x_flg' is boolean

输出:

   a_flg  b_flg  Count  c_flg
0  False   True      3  False
1   True  False      2  False
2  False  False      4   True

注意:对于这个问题,您实际上不需要numpy,熊猫本身可以解决此问题。

答案 1 :(得分:0)

我认为np.where不是必需的,将~用于反转布尔掩码,将链&用于按位AND

print (df.dtypes)
a_flg     bool
b_flg     bool
Count    int64
dtype: object

df['c_flg'] = ~df['a_flg'] & ~df['b_flg'] & (df['Count'] <= 6)
print (df)
   a_flg  b_flg  Count  c_flg
0  False   True      3  False
1   True  False      2  False
2  False  False      4   True