python - 在一列内检测行范围内的异常值
问题描述
在给定的数据框中,我有这两列:
neighbourhood_group
price
价格列包含所有 neighbourhood_group 的所有价格:
neighbourhood_group price
0 Brooklyn 149
1 Manhattan 225
2 Manhattan 150
3 Brooklyn 89
4 Manhattan 80
5 Manhattan 200
6 Brooklyn 60
7 Manhattan 79
8 Manhattan 79
9 Manhattan 150
我正在尝试检测每个neighbourhood_group 的异常值。
到目前为止,我提出的唯一想法是按 neighbourhood_group 按价格分组,检测每个组中的异常值,并为需要删除的行创建一个掩码。
data.groupby('neighbourhood_group')['price']
我怀疑可能有一个更简单的解决方案。
解决方案
您可以使用Groupby.apply
然后获取范围之外的所有值,3 * std
同时用 减去每个值mean
:
m = df.groupby('neighbourhood_group')['price'].apply(lambda x: x.sub(x.mean()).abs() <= (x.std()*3))
df[m]
输出
neighbourhood_group price
0 Brooklyn 149
1 Manhattan 225
2 Manhattan 150
3 Brooklyn 89
4 Manhattan 80
5 Manhattan 200
6 Brooklyn 60
7 Manhattan 79
8 Manhattan 79
9 Manhattan 150
注意:在这种情况下,我们会取回所有行,因为没有异常值。
推荐阅读
- javascript - 将年份转换为时间戳
- c++ - 使用 strtok 解析字符串 - 在 C++ 中两次
- c - 如果可能的话优化 a+=b*c 和进位?
- javascript - PHP动态添加JavaScript元素问题
- python - 检查对象是否存在,如果不存在则手动引发错误
- javascript - 如何使用 @firebase/testing 库测试可调用函数 - 出现错误
- node.js - 为什么我无法使用全局对象
- javascript - 函数 Query.where() 需要一个有效的第三个参数,但它是未定义的
- javascript - vuejs 和 vue native 有什么区别?
- kubernetes - 如何正确标记和配置 Kubernetes 以使用 Nvidia GPU?