Pandas用Apply和Lambda新增列出现Series真值模糊ValueError如何解决
错误原因
核心触发原因是你创建新列时,列名NormID未使用引号包裹,被Python识别为变量而非字符串类型的列名:
- 如果
NormID未定义,会直接抛出NameError; - 如果你此前恰好将
NormID赋值为一个Pandas Series对象,使用df[NormID]取列时会触发布尔索引逻辑,Pandas无法直接对整个Series做布尔判断,就会抛出你看到的ValueError: The truth value of a Series is ambiguous错误。
你提供的可复现代码仅需将NormID改为字符串'NormID'即可正常运行,无需调整apply和lambda的逻辑。
更高效的优化方案
不需要额外生成Gender2列,也不用调用逐行运行的apply,直接用向量化操作即可实现需求,运行效率更高,代码也更简洁,两种常用写法如下:
写法1:用np.where实现二分支判断
import numpy as np new_df['NormID'] = np.where(new_df['Gender'] == 'Female', new_df['ID']/219, new_df['ID']/393)
写法2:用map映射对应除数后直接计算
divisor_map = {'Female':219, 'Male':393} new_df['NormID'] = new_df['ID'] / new_df['Gender'].map(divisor_map)
内容的提问来源于stack exchange,提问作者Data_Yoda
相关产品推荐
相关产品推荐

