Выбросы

Подсчет количества:
print(len(data.query('col < 15')) / len(data))

Поиск групп с аномальными значениями и подсчет количества по группе, убираем группы с большим количеством выбросов:
df['too_many'] = data['col_how_many'] < 20

mean_stat = df.pivot_table(index="col1", values="too_many")

good_id = mean_stat.query('too_many < 0.2')

best_data = df.query('col1_id in @good_id.index')
print (len(df))
print (len(best_data))

Теперь только для выбранных групп убираем выбросы по значениям, например от 10 до 500:
best_data = best_data.query('(col_how_many >= 10) & (col_how_many <= 500)')

Язык и производные:

Назначение команды: