Устранить выбросы в группах со стандартным отклонением в Pandas? - PullRequest
0 голосов
/ 22 января 2020

У меня есть 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'])

но я не уверен в том, как связать их воедино.

У кого-нибудь есть идеи о том, как просто и аккуратно реализовать это? Это не кажется мне очень сложным, но другие посты здесь не дали удовлетворительного или рабочего ответа.

1 Ответ

0 голосов
/ 22 января 2020

Используйте GroupBy.transform и Series.between, это быстрее :

groups = df.groupby('group')['col']
groups_mean = groups.transform('mean')
groups_std = groups.transform('std')
m = df['col'].between(groups_mean.sub(groups_std.mul(3)),
                      groups_mean.add(groups_std.mul(3)),
                      inclusive=False)
print(m)
new_df = df.loc[m]

When should I want to use apply

Ваш код с заявкой может быть:

df.groupby(by='group')['col'].apply(lambda x: x.lt( x.mean().add(x.std().mul(3)) ) & x.gt( x.mean().sub(x.std().mul(3)) ))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...