You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于分组均值/std为DataFrame添加Weight异常值识别列遇歧义错误

解决异常值识别的报错问题

你的代码报错是因为在apply的lambda里,拿单个Weight值和整个Weight_Mean、Weight_std列做比较,生成的是布尔Series,而if语句无法判断整个Series的真值(无法确定是要求全True还是存在True即可),因此抛出"The truth value of a series is ambiguous"错误。

最优解决方案:矢量化运算(推荐)

直接用pandas的矢量化列操作,逐行对应计算,无需apply,效率更高:

# 生成布尔类型的异常值标记列
df2["Weight_Outlier"] = (df2["Weight"] > (df2["Weight_Mean"] + df2["Weight_std"] * 2.5)) | (df2["Weight"] < (df2["Weight_Mean"] - df2["Weight_std"] * 2.5))

# 如需转换为1/0的数值列
df2["Weight_Outlier"] = df2["Weight_Outlier"].astype(int)

备选方案:按行apply(不推荐,效率较低)

如果一定要用apply,需指定axis=1让函数按行处理,lambda参数为整行数据,取当前行的均值和标准差计算:

df2["Weight_Outlier"] = df2.apply(
    lambda row: row["Weight"] > (row["Weight_Mean"] + row["Weight_std"]*2.5) or row["Weight"] < (row["Weight_Mean"] - row["Weight_std"]*2.5),
    axis=1
)

这样就能生成所需的True/False标记列,后续可直接用于异常值分布分析或模型训练对比测试。

内容的提问来源于stack exchange,提问作者DLE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:55:24