首页 > 解决方案 > 从数据框中删除不遵循平均趋势的行

问题描述

我正在尝试从延迟“平滑路线”的 GPS 坐标数据框中删除值。

一条平稳的路线是所有值都超出总体趋势范围的路线。

我希望它简单而不使用其他大包(例如scipy)。`

一个问题是前几个值可能不正确,因此无法使用。数据框可以是任何大小,从几个点到几千个不等。我相信使用较小的数据集会更困难。

最小的例子:

import pandas as pd
df = pd.DataFrame({'a': {0: 52.1, 1: 5.2, 2: 5.3, 3: 5.2, 4: 5.4, 5: 0.0, 6: 5.2}, 'b': {0: 3.0, 1: 3.0, 2: 3.0, 3: 0.0, 4: 46.0, 5: 3.1, 6: 3.2}})

>>> df
     a     b
0  52.1  3.0
1  5.2   3.0
2  5.3   3.0
3  5.2   0.0
4  5.4  46.0
5  0.0   3.1
6  5.2   3.2

期望的输出:

>>> df
     a     b
1  5.2   3.0
2  5.3   3.0
6  5.2   3.2

我尝试过使用 z-score,但这并不总是适用于所有用例,因为数据中的微小变化不会被拾取。

标签: pythonpandas

解决方案


考虑删除顶部和底部 10 个分位数:

>>> df[(df>=df.quantile(0.10)) & (df<=df.quantile(0.90))].dropna()
     a    b
1  5.2  3.0
2  5.3  3.0
6  5.2  3.2

您可以根据需要为较大的数据集调整分位数。


推荐阅读