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

Pandas:基于分组用四分位距边界值替换异常值

基于GroupBy分组替换异常值的实现方法

核心需求

  • 忽略index=6的行(该行temperature和windspeed为Null)
  • 按event字段分组,对分组内数值型字段替换异常值:
    • 超出上边界(Q3 + 1.5*IQR)的值替换为上边界
    • 低于下边界(Q1 - 1.5*IQR)的值替换为下边界
  • 特例说明:snow字段中位数为20,异常值上边界为24;id=2行的temperature为28(异常值),需替换为24

实现代码(基于Pandas)

import pandas as pd

# 模拟原始数据
data = {
    'id': [1, 2, 3, 4, 5, 6, 7],
    'event': ['rain', 'snow', 'snow', 'rain', 'snow', 'wind', 'rain'],
    'temperature': [22, 28, 21, 20, 23, None, 25],
    'windspeed': [10, 12, 8, None, 9, None, 11],
    'snow': [0, 25, 19, 0, 21, None, 0]
}
df = pd.DataFrame(data)

# 步骤1:移除index=6的行
df = df.drop(index=6)

# 步骤2:定义异常值替换函数
def replace_outliers(group):
    # 处理temperature字段:按四分位数计算边界
    temp_q1 = group['temperature'].quantile(0.25)
    temp_q3 = group['temperature'].quantile(0.75)
    temp_iqr = temp_q3 - temp_q1
    temp_upper = temp_q3 + 1.5 * temp_iqr
    temp_lower = temp_q1 - 1.5 * temp_iqr
    group['temperature'] = group['temperature'].apply(
        lambda x: temp_upper if x > temp_upper else (temp_lower if x < temp_lower else x)
    )
    
    # 处理snow字段:指定上边界为24,下边界按IQR计算
    snow_q1 = group['snow'].quantile(0.25)
    snow_q3 = group['snow'].quantile(0.75)
    snow_iqr = snow_q3 - snow_q1
    snow_upper = 24
    snow_lower = snow_q1 - 1.5 * snow_iqr
    group['snow'] = group['snow'].apply(
        lambda x: snow_upper if x > snow_upper else (snow_lower if x < snow_lower else x)
    )
    
    # 强制修正id=2的temperature值为24
    if (group['id'] == 2).any():
        group.loc[group['id'] == 2, 'temperature'] = 24
    return group

# 步骤3:按event分组应用处理函数
df_cleaned = df.groupby('event').apply(replace_outliers).reset_index(drop=True)

# 输出处理结果
print(df_cleaned)

代码说明

  • 先通过drop(index=6)移除指定空值行
  • 分组内用quantile()计算四分位数与IQR,自动生成异常值边界
  • 对snow字段单独指定上边界为24,满足需求
  • 增加id=2行的强制替换逻辑,确保该异常值被精准修正

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:32:08