Удалите строки из фрейма данных, которые не соответствуют среднему тренду

#python #pandas

Вопрос:

Я пытаюсь удалить значения из фрейма данных 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-оценку, и это не всегда работает для всех вариантов использования, так как небольшие изменения в данных не улавливаются.

Комментарии:

1. Вам нужно будет определить «отложить» и «сгладить», чтобы это имело четко определенное решение.

2. У вас есть несколько диапазонов или вы уверены, что у вас есть только один диапазон?

3. Другой вопрос: у вас есть такой шаблон: 1,2,3,50,51? Где выбросы, если у вас несколько диапазонов? Диапазон с более длинной последовательностью, не так ли?

4. Я не совсем понимаю, что вы имеете в виду под своим первым вопросом…. Второй вопрос, я бы сказал, что диапазон с более длинной последовательностью

Ответ №1:

Рассмотрите возможность удаления верхних и нижних 10 квантилей:

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

Вы можете настроить квантили по мере необходимости для вашего большего набора данных.

Комментарии:

1. Что делать, если в нижнем квантиле нет значения, выходящего за пределы диапазона? Например, значения столбца (b) между 1 — 7 или все записи имеют одинаковое значение?

2. Я думаю, что его вопрос больше о том, как исключить выбросы в данных.

3. @not_speshal Спасибо вам за ваш ответ. Что делать, если в данных вообще нет выбросов, хорошие данные удаляются?