如何在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
相关产品推荐
相关产品推荐

