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

如何在Python中为X-Y散点图按X值去除Y异常值?

按x分组去除y列异常值(IQR法)

直接用pandas的groupby结合自定义筛选函数就能实现按每个x值单独处理y的异常值,核心思路是对每个x分组计算y的IQR范围,再筛选出组内y值在范围内的数据。

实现代码

import pandas as pd

def remove_outliers(group):
    # 计算IQR
    q1 = group['y'].quantile(0.25)
    q3 = group['y'].quantile(0.75)
    iqr = q3 - q1
    # 定义异常值边界
    lower_bound = q1 - 1.5 * iqr
    upper_bound = q3 + 1.5 * iqr
    # 样本量过小时分位数无意义,直接保留所有数据
    if len(group) < 4:
        return group
    # 筛选非异常值
    return group[(group['y'] >= lower_bound) & (group['y'] <= upper_bound)]

# 按x分组处理并合并结果
filtered_df = df.groupby('x').apply(remove_outliers).reset_index(drop=True)

代码说明

  • groupby('x'):将DataFrame按x列的每个唯一值拆分成独立分组
  • remove_outliers函数:对每个组单独计算y的四分位数与IQR,筛选落在[Q1-1.5*IQR, Q3+1.5*IQR]区间内的y值;若组内样本数不足4条,直接保留全部数据(避免分位数计算偏差)
  • reset_index(drop=True):重置索引,让处理后的数据回到常规DataFrame格式

如果需要调整异常值判定的严格程度,直接修改lower_bound和upper_bound中的倍数即可(比如用3*IQR代替1.5*IQR)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:57:04