2017-04-27 45 views
1

与此一起挣扎!我想创建一个基于多个列的逻辑OR的新数据帧列。根据多列的逻辑运算创建一个新列

的数据帧的形式为:

apples bananas oranges 
0    bananas 
1 apples 
2 
3      oranges 
4 
5    bananas oranges 

(该列中的空白是NaN的)。我想创建一个新栏目,指出水果是否被提及(无论提及的次数如何)。所以我结束了这一点:

apples bananas oranges fruit 
0    bananas    fruit 
1 apples       fruit 
2 
3      oranges fruit 
4 
5    bananas oranges fruit 

对我来说,它看起来像一个逻辑或在前三栏,但我就是不知道如何做到这一点。

+0

那么,什么是存在缺失在这个问题上列的值,即。空白字符串,'NaN'等... – EdChum

+0

空白是NaN。 – user4896331

回答

1

使用可以使用notnullanyloc如果为空值NaN

df.loc[df.notnull().any(1), 'new'] = 'fruit' 
print (df) 
    apples bananas oranges new 
0  NaN bananas  NaN fruit 
1 apples  NaN  NaN fruit 
2  NaN  NaN  NaN NaN 
3  NaN  NaN oranges fruit 
4  NaN  NaN  NaN NaN 
5  NaN bananas oranges fruit 

或者,如果空值是空字符串使用numpy.where与改变的面膜:

df[ 'new'] = np.where((df != '').any(1), 'fruit', '') 
print (df) 
    apples bananas oranges new 
0   bananas   fruit 
1 apples     fruit 
2         
3     oranges fruit 
4         
5   bananas oranges fruit 
+0

太棒了!谢谢! – user4896331

+0

如果我只想包括苹果和香蕉列,'df.loc [df.notnull()。any(1),'new'] ='fruit''如何改变? – user4896331

+0

然后使用子集'df.loc [df [[''apples','bananas']] .notnull()。any(1),'new'] ='fruit'' – jezrael