Структура моей сводной таблицы:
Crypto Exchange ABUCOINS BINANCE ... ZAIF Average StdDeviation
Transaction time_period_start
01:00:00 PM 13762.75 NaN ... NaN 13482.51 700.253
02:00:00 AM 13563.53 NaN NaN 13591.80 782.476
BTC_USD .
.
12:00:00 PM 13630.80 NaN ... NaN 13595.96 497.21
.
.
.
ZYD_USD 01:00:00 AM NaN 0.045 ... NaN 0.032 0.02
.
12:00:00 PM
Фрейм данных содержит более 5000 транзакций на 23 платформах Crypto Exchange. Сводная таблица индексируется Transaction
и time_period_start
по столбцам Crypto Exchange
Чтобы определить выброс, я хочу отметить отдельную цену во всех столбцах, которые имеют значение меньше (или больше) значения StdDeviation
для этой строки.
Я просмотрел различные вопросы, которые уже присутствовали, и предложил следующую функцию:
def findOutlier(x):
for i in range(len(x)-1):
if x[i] is not None and abs(x[i] - x[-2]) > x[-1]:
x[i] = True
return x[0]
Тогда
df_temp = df_with_sd.apply(findOutlier, axis=1)
Проблемы с этим подходом:
- Потеря первоначальной цены - значения изменяются на 1,0, в то время как я хочу найти способ отметить каждую цену, не теряя ее ценовое значение. (Может быть, добавив знак
+
после значений?)
- Функция работает аналогично даже после изменения условий
Как я могу получить требуемые результаты?