2017-04-04 65 views
1

我想比较数据框中的字符串与特定的警告,如果其中一个字符串已经等于“缺少”该值将被结转。以elif方式比较熊猫数据框中的字符串

举例来说,如果我的DF看起来像

df =pd.DataFrame({'Col1':['Dog','Cat','Missing'], 
     'Col2':['Dog', 'Monkey', 'Rat']}) 

。我问Col1中是col2的结果将是

True, False, Missing 

下面的代码允许每行值的比较(我提供与“真”和“假”值),但我一直在努力与如何纳入检查“失踪”

df['result'] = df.apply(lambda row: row[Col1] in row[Col2], axis=1) 

也许我应该放弃在这种情况下使用lambda函数的概念,并切换到IF/ELIF /声明如在此伪代码:

if df[df[Col1]] == "Missing": 
    df['result'] = 'Missing' 
elif df[df[Col1]] in df[df[Col2]]: 
    df['result'] = 'True' 
else: 
    df['result'] = 'False' 

我感谢所有帮助您可以提供。

回答

3

我想你可以使用双numpy.where

mask1 = df['Col1'] == 'Missing' 
mask2 = df.apply(lambda row: row['Col1'] in row['Col2'], axis=1) 

df['result'] = np.where(mask1, 'Missing', 
       np.where(mask2, 'True', 'False')) 

print (df) 
     Col1 Col2 result 
0  Dog  Dog  True 
1  Cat Monkey False 
2 Missing  Rat Missing 
+0

烨说做到了,这是一个巧妙的方法!谢谢! – Dennis