У меня есть pandas. Серии положительных чисел. Мне нужно найти индексы "выбросы", значения которых отклоняются на 3
или больше от предыдущей "нормы".
Как векторизовать эту функцию:
def baseline(s):
values = []
indexes = []
last_valid = s.iloc[0]
for idx, val in s.iteritems():
if abs(val - last_valid) >= 3:
values.append(val)
indexes.append(idx)
else:
last_valid = val
return pd.Series(values, index=indexes)
Например, если вход:
import pandas as pd
s = pd.Series([7,8,9,10,14,10,10,14,100,14,10])
print baseline(s)
желаемый результат:
4 14
7 14
8 100
9 14
Обратите внимание, что значения 10
после 14
не возвращаются, потому что они являются значениями "вернуться к нормальному".
Редактирование:
- Добавлен код
abs()
в код. Числа положительны. - Целью здесь является ускорение кода.
- Ответ, который не совсем имитирует код, может быть приемлемым.
- Изменен пример, чтобы включить другой регистр, где значения медленно изменяются на 3.