python - pandas group by 删除异常值
问题描述
我想按组删除基于百分位 99 值的异常值。
import pandas as pd
df = pd.DataFrame({'Group': ['A','A','A','B','B','B','B'], 'count': [1.1,11.2,1.1,3.3,3.40,3.3,100.0]})
在输出中,我想从 A 组中删除 11.2,从 B 组中删除 100。所以在最终数据集中只有 5 个观察值。
wantdf = pd.DataFrame({'Group': ['A','A','B','B','B'], 'count': [1.1,1.1,3.3,3.40,3.3]})
我试过这个,但我没有得到想要的结果
df[df.groupby("Group")['count'].transform(lambda x : (x<x.quantile(0.99))&(x>(x.quantile(0.01)))).eq(1)]
解决方案
这是我的解决方案:
def is_outlier(s):
lower_limit = s.mean() - (s.std() * 3)
upper_limit = s.mean() + (s.std() * 3)
return ~s.between(lower_limit, upper_limit)
df = df[~df.groupby('Group')['count'].apply(is_outlier)]
您可以编写自己的 is_outlier 函数
推荐阅读
- java - 修复,使显示可以同时显示十进制数和整数 java
- reactjs - 路由刷新页面时显示空白页
- python - “?”在哪里?用于服务器端参数绑定的 Snowflake SQL 查询中的字符?
- javascript - 前端授权几乎总是不安全的。你不同意吗?
- python - Keras 模型 ValueError:无法挤压昏暗 [1],预期维度为 1,得到 90
- javascript - 将参数/变量保存到 JSON 文件中的不和谐帐户
- hybris - Hybris - 将服务产品添加到主要产品
- reactjs - 根据条件改变状态
- elasticsearch - 使用摄取管道的 Elastich 搜索翻转索引
- php - PSR-12 - 方法链、换行和缩进