【问题标题】:Pandas - adding a column based on multiple conditions [duplicate]Pandas - 根据多个条件添加列[重复]
【发布时间】:2018-08-08 16:58:41
【问题描述】:

尝试根据两个互斥条件将布尔列添加到 df:

  1. df['Type'] == 'CMBX'
  2. df['SubType'].isin(['EM','NAHY'])

他们分开工作

df['Px Quoted'] = np.where(df['Type'] =='CMBX', True, False)
df[df['Type']=='CMBX'].head(5)
Out[72]: 
  Batch  Type SubType  Px Quoted
0   NaN  CMBX               True
1   NaN  CMBX               True
2   NaN  CMBX               True
3   NaN  CMBX               True
4   NaN  CMBX               True

df['Px Quoted'] = np.where(df['SubType'].isin(['EM','NAHY']), True, False)

df[df['SubType']=='EM'].head(5)
Out[74]: 
     Batch Type SubType  Px Quoted
21  NY1530  CDX      EM       True
29  NY1530  CDX      EM       True
36  NY1530  CDX      EM       True
43  NY1530  CDX      EM       True
50  NY1530  CDX      EM       True

但以下没有

df['Px Quoted'] = np.where(df['Type'] =='CMBX' or df['SubType'].isin(['EM','NAHY']), True, False)

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

不知道为什么它是模棱两可的,因为类型 CMBX 不能包含任何子类型 ['EM','NAHY'] 任何想法?是因为它的 Subtype 是空白的吗?

【问题讨论】:

  • 使用|,每个条件都用括号括起来,例如(df[col] == 'a') | (df[col2] == 'b').

标签: pandas


【解决方案1】:

np.where 需要使用位运算符:

df['Px Quoted'] = np.where((df['Type'] =='CMBX') | (df['SubType'].isin(['EM','NAHY'])), True, False)

在这里,我将or 更改为|

【讨论】:

  • 需要@jpp 建议的括号中的条件,否则出错
  • 加了括号,谢谢
猜你喜欢
  • 2018-09-10
  • 2016-02-03
  • 2019-07-21
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 2020-06-09
  • 2023-03-27
  • 2021-12-02
相关资源
最近更新 更多