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

、それは論理のようにOR最初の3つの列に見えますが、私はちょうどそれを行う方法を動作することはできません。

+0

だから何が不足しているとして存在しますこのように列の値、すなわち、空文字列、 'NaN'など... – EdChum

+0

空白はNaNです。 – user4896331

答えて

1

空の値がNaNであれば使用はanylocnotnullを使用することができます。

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

関連する問題