Удаление строк из датафрейма, если значение встречается меньше или больше, чем N раз
Как удалить строки из df, если значение встречается меньше 3 или больше 3 раз в колонке match_id
| match_id | player | win |
|---|---|---|
| 111 | 1 | 0 |
| 111 | 2 | 0 |
| 111 | 3 | 0 |
| 112 | 1 | 1 |
| 112 | 2 | 1 |
| 113 | 1 | 0 |
| 113 | 2 | 0 |
| 113 | 3 | 0 |
| 113 | 4 | 0 |
| 113 | 5 | 0 |
| 113 | 6 | 0 |
Должно остаться только:
| match_id | player | win |
|---|---|---|
| 111 | 1 | 0 |
| 111 | 2 | 0 |
| 111 | 3 | 0 |
помогите, пожалуйста
Ответы (2 шт):
Автор решения: Step1709
→ Ссылка
Можно сделать этим способом:
match_id_counts = df['match_id'].value_counts()
valid_match_ids = match_id_counts[match_id_counts == 3].index
filtered_df = df[df['match_id'].isin(valid_match_ids)]
В этом варианте сначала были посчитаны повторения в столбце, затем отобраны те значения, которые повторялись ровно 3 раза, а затем датафрейм был отфильтрован по этим значениям.
Автор решения: Алексей Р
→ Ссылка
Группируем по match_id, считаем каждую группу через transform('count'), делаем булев массив c .eq(3) и отбираем нужные строки через df[булев массив]
df = df[df.match_id.groupby(df.match_id).transform('count').eq(3)]
match_id player win
0 111 1 0
1 111 2 0
2 111 3 0