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

基于3倍标准差在pandas DataFrame中标记异常值并新增列

实现方案

3倍标准差异常判定规则为:当数值落在[分组均值 - 3*分组标准差, 分组均值 + 3*分组标准差]区间外时,判定为异常值。
你可以借助pandas的分组+transform方法实现需求,完整代码如下:

import pandas as pd

# 构造示例数据
data = {'Group':['A', 'A', 'A'], 'Age':[18, 200, 17]} 
df = pd.DataFrame(data)

# 定义3倍标准差异常判定函数
def flag_outlier(series):
    mean_val = series.mean()
    std_val = series.std()
    # 超出区间返回True,否则返回False
    return ~series.between(mean_val - 3 * std_val, mean_val + 3 * std_val)

# 按Group分组计算,生成布尔类型Outlier列
df['Outlier'] = df.groupby('Group')['Age'].transform(flag_outlier)

# 若需要得到字符串格式的True/False,可替换为下面这行
# df['Outlier'] = df.groupby('Group')['Age'].transform(flag_outlier).astype(str)

补充说明

你提供的示例数据中,单组A的3倍标准差区间约为[-237.8, 394.4],200仍在区间内,按照严格3倍标准差规则不会被判定为异常。如果需要和你给出的示例输出完全一致,可以调整为1.5倍四分位距判定规则,实现代码如下:

def flag_outlier_iqr(series):
    q1 = series.quantile(0.25)
    q3 = series.quantile(0.75)
    iqr = q3 - q1
    return ~series.between(q1 - 1.5 * iqr, q3 + 1.5 * iqr)

df['Outlier'] = df.groupby('Group')['Age'].transform(flag_outlier_iqr).astype(str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:36:04