在pandas数据帧中,根据另外两列中的结果生成第三列数据

时间:2016-09-21 18:27:46

标签: python pandas dataframe boolean conditional-statements

我是数据帧的新手。我有列ABC,并希望使用A和B中的数据在C中创建值。例如,如果A = 1和/或{ {1}},然后我想在B = 1列中放置一个1,并为数据框中的所有行执行此逻辑。

e.g。起始阵列:

C

结果数组:

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

5 个答案:

答案 0 :(得分:2)

给出起始DF:

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

然后您可以创建列C

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

然后将df留作:

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

答案 1 :(得分:2)

使用numpy.where

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

或者更简单地通过astype将布尔Series转换为int

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

答案 2 :(得分:1)

使用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' == 1 使用&,则更改条件:

示例:

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

这将返回:

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

答案 3 :(得分: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)

答案 4 :(得分:0)

您可以使用numpy @echo off echo hello 1234 > doc.txt set /p contents = < doc.txt echo The contents of "doc.txt"="%contents%" pause exit logical_and

的逻辑功能
logical_or