基于输入其他列的组合定义pandas列

时间:2018-05-30 08:03:15

标签: python pandas

我想根据现有列中的值在我的pandas数据框中创建一个新列。新列的输入应为boolean。目前我正在尝试以下方法:

import pandas as pd

df_edit = pd.DataFrame({'Included': [False, False, True, False], 'Update 
Check': [True, True, True, True], 'duplicate_fname': [True, False, False, 
False], 'duplicate_targetfname': [False, False, False, False]})

df_edit['test'] = df_edit['Included'] == False & 
df_edit['Update Check'] == True & (df_edit['duplicate_fname'] == True | 
df_edit['duplicate_targetfname'] == True)

当我尝试这样做时,我得到一个ValueError,说明如下:

  

ValueError:系列的真值是不明确的。使用a.empty,a.bool(),> a.item(),a.any()或a.all()。

还有其他办法吗?

我的预期输出是一个由以下值组成的列:

True, False, False, False

1 个答案:

答案 0 :(得分:1)

没有括号括起来的问题:

df_edit['test'] = (df_edit['Included'] == False) & \
                  (df_edit['Update Check'] == True) & \
                  ((df_edit['duplicate_fname'] == True) | 
                   (df_edit['duplicate_targetfname'] == True))

print (df_edit)
   Included  Update Check  duplicate_fname  duplicate_targetfname   test
0     False          True             True                  False   True
1     False          True            False                  False  False
2      True          True            False                  False  False
3     False          True            False                  False  False

但更好的是将~用于反向布尔掩码并省略与True的比较:

df_edit['test'] = ~df_edit['Included'] & 
                   df_edit['Update Check'] & 
                   (df_edit['duplicate_fname'] | df_edit['duplicate_targetfname'])
print (df_edit)

   Included  Update Check  duplicate_fname  duplicate_targetfname   test
0     False          True             True                  False   True
1     False          True            False                  False  False
2      True          True            False                  False  False
3     False          True            False                  False  False