Python 基于输入和其他列的组合定义列
我想基于现有列中的值在我的数据框架中创建一个新列。新列的输入应为Python 基于输入和其他列的组合定义列,python,pandas,Python,Pandas,我想基于现有列中的值在我的数据框架中创建一个新列。新列的输入应为布尔值。目前,我正在尝试以下方法: 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
布尔值
。目前,我正在尝试以下方法:
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,说明如下:
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:序列的真值不明确。使用a.empty、a.bool()、>a.item()、a.any()或a.all()
还有别的办法吗
我的预期输出将是一列,其中包含以下值:
True, 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))
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
s的比较:
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
它们必须用大括号围起来。哇,太快了。多谢各位@LaurensWit-我显然删除了这个答案,因为这是一个更好的解决方案。