我想根据现有列中的值在我的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
答案 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