2016-09-21 5 views
2

私はデータフレームの初心者です。私は、列ABCを持っており、A = 1および/またはB = 1が、その後、私は列C1を配置する場合、例えばCの値を作成するために、AとBのデータを使用すると、このロジックを行いますデータフレーム内のすべての行pandasデータフレームでは、他の2つのカラムの結果に基づいて3番目のカラムデータを生成します

出発配列:

  A B C 
0  1 0 
1  0 1 
2  1 1 
3  0 0 

など

得られた配列:

  A B C 
0  1 0 1 
1  0 1 1 
2  1 1 1 
3  0 0 0 

など

答えて

0
def f(x): 

    if (x.B==1) and (x.A !=1): #Or whatever logic you like 
     return 1 
    else: 
     return 0 

df['C'] = df.apply(lambda x: f(x), axis = 1) 
2

出発DFの所定:

df = pd.DataFrame({'A': [1, 0, 1, 0], 'B': [0, 1, 1, 0]}) 

次に、あなたのような列Cを作成することができます:使用numpy.where

A B C 
0 1 0 1 
1 0 1 1 
2 1 1 1 
3 0 0 0 
+0

'のDF [ 'C'] =

df['C'] = [(1 if i & j == 1 else 0) for i,j in zip(df['A'], df['B'])] 

これが返しますdf == 1).any(軸= 1).astype(int) 'おそらく十分でしょうか? – Zero

+0

@JohnGalt yup - ばかな私 - ありがとう。私は答えを更新しました。 –

2

df['C'] = (df == 1).any(axis=1).astype(int) 

は次にようdfを残し

df['C'] = np.where(df.A | df.B, 1, 0) 
print (df) 
    A B C 
0 0 0 0 
1 0 1 1 
2 1 0 1 
3 1 1 1 

df['C'] = np.where((df.A == 0) & (df.B == 0), 0, 1) 
print (df) 
    A B C 
0 0 0 0 
1 0 1 1 
2 1 0 1 
3 1 1 1 

それともsimplier astypeによってintにブールSeriesを変換します。

df['C'] = (df.A | df.B).astype(int) 
print (df) 
    A B C 
0 0 0 0 
1 0 1 1 
2 1 0 1 
3 1 1 1 

df['C'] = (~((df.A == 0) & (df.B == 0))).astype(int) 
print (df) 
    A B C 
0 0 0 0 
1 0 1 1 
2 1 0 1 
3 1 1 1 
0

あなたが使用してnumpyのlogical_andの論理的な機能とlogical_or

import numpy as np 

df['C'] = np.logical_and(df['A'], df['B']).astype(int) 
0

他のソリューションを使用することができますlist comprehesionzip

df['C'] = [(1 if i or j == 1 else 0) for i,j in zip(df['A'], df['B'])] 

それが返されます。

A B C 
0 1 0 1 
1 0 1 1 
2 1 1 1 
3 0 0 0 

変更条件場合'A''B'==使用&

例:(

A B C 
0 1 0 0 
1 0 1 0 
2 1 1 1 
3 0 0 0 
関連する問題