如何基于pandas多列条件生成新布尔列并解决列赋值报错问题
报错原因及解决方案
第一次报错原因
DFz[(DFz['Inflation Bond'] != 'Y') & (DFz['Bond Coupon'] != 'ZERO COUPON')]返回的是满足条件的完整DataFrame子集,包含原表所有列,你尝试将多列数据赋值给单个新列,自然会触发传入元素数量不符,预期1个的报错。
第二次报错原因
你在条件表达式外层手动加了[],相当于把整段返回的布尔Series塞进了一个长度为1的列表中,列表长度和DataFrame的总行数不匹配,因此报值长度和索引长度不匹配的错误。
正确写法
直接将条件判断返回的布尔Series赋值给新列即可,空值和字符串比较会返回空布尔值,你可以根据业务需求决定是否填充:
# 基础写法,直接生成布尔列 DFz['Pass'] = (DFz['Inflation Bond'] != 'Y') & (DFz['Bond Coupon'] != 'ZERO COUPON') # 若需要处理空值,示例将空值对应的结果统一设为False DFz['Pass'] = ((DFz['Inflation Bond'] != 'Y') & (DFz['Bond Coupon'] != 'ZERO COUPON')).fillna(False) # 对应你第二次尝试的列名版本 DFz['test'] = (DFz['INFLATION_LINKED_INDICATOR'] != 'Y') & (DFz['CPN_TYP'] != 'ZERO COUPON')
内容的提问来源于stack exchange,提问作者Sumit
相关产品推荐
相关产品推荐

