如何在Pandas DataFrame中计算排除离群值后的每行均值
报错原因
- 你代码中
data.T[0:5]获取的是Series结构,列表推导式里的条件判断u - 2 * s < e < u + 2 * s返回的是布尔值Series而非单个布尔值,Pandas无法直接判断Series的整体真值,因此抛出该错误。 - 现有代码逻辑还存在两处不符合需求的问题:一是阈值用了2倍标准差,和你要求的1倍标准差不符;二是你把已计算好的
Mean value列也纳入了离群值过滤的计算范围,会干扰统计结果。
正确实现方案
使用Pandas的apply按行处理,仅取前4列原始数值参与计算即可,代码如下:
import pandas as pd import numpy as np def calc_filtered_mean(row): # 仅取前4列原始数值,排除已有的均值列 origin_values = row.iloc[:4] # 计算当前行的均值和标准差 row_mean = origin_values.mean() row_std = origin_values.std() # 过滤出在均值±1倍标准差范围内的数值 valid_values = origin_values[(origin_values > row_mean - row_std) & (origin_values < row_mean + row_std)] # 返回过滤后的平均值 return valid_values.mean() # 新增列存储处理结果 a['Mean without outliers'] = a.apply(calc_filtered_mean, axis=1)
内容的提问来源于stack exchange,提问作者Aless
相关产品推荐
相关产品推荐

