2017-04-27 44 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