小能豆

根据输入的其他列的组合定义pandas列

py

我想根据现有列中的值在 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:Series 的真值不明确。请使用 a.empty、a.bool()、>a.item()、a.any() 或 a.all()。

还有其他方法可以做到这一点吗?

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

True, False, False, False

阅读 23

收藏
2025-01-02

共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

但更好的方法是使用~反转布尔掩码并省略与Trues 的比较:

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
2025-01-02