如何在Pandas DataFrame中添加基于max()函数判断结果的新列?
问题解决方法
首先纠正你代码里的两个基础问题:
- 导入numpy时拼写错误:
import bumpy as np应该改成import numpy as np - 你的
np.where语法错误,且用Python内置max()处理多列Series的方式不对——max()会尝试判断整个Series的真假,这就是触发ValueError的原因,Pandas无法解析这种模糊的布尔判断。
正确实现方式
要实现需求,核心是先计算每行B、C、D三列的最大值,再和A列逐行比较。这里提供两种简洁的写法:
方法1:使用np.where
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(0,100,size=(5, 4)), columns=list('ABCD')) # 按行计算B/C/D的最大值,再和A列比较 df['E'] = np.where(df['A'] > df[['B', 'C', 'D']].max(axis=1), 1, 0)
方法2:布尔值转整数
利用Pandas中布尔值True等价于1、False等价于0的特性,直接转换类型:
df['E'] = (df['A'] > df[['B', 'C', 'D']].max(axis=1)).astype(int)
关键说明
df[['B', 'C', 'D']].max(axis=1) 中的axis=1表示按行计算最大值,返回一个和A列长度一致的Series,这样和A列逐行比较时,就能得到每行对应的布尔判断结果,再转换成你需要的1/0即可。
内容的提问来源于stack exchange,提问作者connorc
相关产品推荐
相关产品推荐

