У меня есть Pandas фрейм данных, из которого я пытаюсь удалить выбросы по группам. Каждая строка в группе считается выбросом значения столбца, если он находится за пределами диапазона
[group_mean - (group_std_dev * 3), group_mean + (group_std_dev * 3)]
, где group_mean - это среднее значение столбца в группе, а group_std_dev - стандартное отклонение столбец для группы. Я попробовал следующую Pandas цепочку
df.groupby(by='group').apply(lambda x: x[(x['col'].mean() - (x['col'].std() * 3)) < x['col'] < (x['col'].mean() - (x['col'].std() * 3)])
, но это не работает, так как Pandas выдает следующую ошибку для сравнения внутри применения
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Ошибка не кажется, имеет для меня большой смысл, потому что сравнение должно преобразовать в серию bools, которая затем применяется к группе x?
Однако фильтрация только по верхней или нижней границе работает, как
df.groupby(by='group').apply(lambda x: x[(x['col'].mean() - (x['col'].std() * 3)) < x['col'])
но я не уверен в том, как связать их воедино.
У кого-нибудь есть идеи о том, как просто и аккуратно реализовать это? Это не кажется мне очень сложным, но другие посты здесь не дали удовлетворительного или рабочего ответа.