【问题标题】:Defining pandas column based on combination of input other columns [duplicate]根据输入其他列的组合定义熊猫列[重复]
【发布时间】:2018-11-08 23:54:42
【问题描述】:

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

【问题讨论】:

  • 它们必须用大括号括起来。

标签: python pandas


【解决方案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

【讨论】:

  • 哇,真快。非常感谢!
  • @LaurensdeWit - 我显然删除了答案,因为欺骗,但因为这里是更好的解决方案保留它。
猜你喜欢
  • 2018-10-26
  • 2019-09-09
  • 2023-01-11
  • 1970-01-01
  • 2021-10-18
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多