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

如何在Pandas中计算各分组异常值的均值?

计算Pandas分组中异常值的均值

首先,你的原始DataFrame如下:

import pandas as pd
import numpy as np

df = pd.DataFrame({'group':list('aaaabbbbab'),
                   'val':[1,3,3,2,5,6,6,2,10,12],
                   'id':[1,1,2,2,2,3,3,3,12,14],
                   })

你已经实现了统计各分组的异常值数量、总记录数和分组均值,现在只需新增一个函数来计算异常值的均值,并整合到聚合操作中即可。

步骤1:定义异常值均值计算函数

沿用你当前对异常值的判定规则(小于25分位数或大于75分位数即为异常值),新增函数如下:

def get_outlier_mean(column):
    q1 = np.percentile(column, 25)
    q3 = np.percentile(column, 75)
    # 筛选出当前列的异常值
    outliers = column[(column < q1) | (column > q3)]
    # 避免空序列报错,无异常值时返回NaN
    return outliers.mean() if len(outliers) > 0 else np.nan

步骤2:整合聚合操作

将新函数与你已有的get_num_outliers函数、内置聚合方法一起传入agg:

def get_num_outliers(column):
    q1 = np.percentile(column, 25)
    q3 = np.percentile(column, 75)
    return sum((column < q1) | (column > q3))

# 仅对val列执行多维度聚合(无需统计id列的相关指标)
result = df.groupby('group')['val'].agg([get_num_outliers, 'count', 'mean', get_outlier_mean])
# 重命名列名提升可读性
result.columns = ['异常值数量', '总记录数', '分组均值', '异常值均值']
print(result)

输出结果

运行后会得到如下统计结果:

异常值数量  总记录数  分组均值  异常值均值
group                            
a           1      5    2.8      5.0
b           2      5    7.2     11.0

结果说明

  • 分组a的val列中,仅数值5是异常值(Q1=2,Q3=3,5>3),均值为5.0
  • 分组b的val列中,10和12是异常值(Q1=2,Q3=6,两个值均大于6),均值为(10+12)/2=11.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:35:13