Как можно проверить дублирование на уровне группы? - PullRequest
0 голосов
/ 30 октября 2018

Как я могу проверить наличие дублированных групп и удалить их? Вот мой фрейм данных:

Group     Value_1      Value_2
 A          17           0.1
 A          20           0.8
 A          22           0.9
 A          24           0.13

 B          17           0.1
 B          20           0.8
 B          22           0.9
 B          24           0.13

 C          17           0.1
 C          20           0.8
 C          22           0.9
 C          26           0.11    

В этом кадре данных группы A и B являются дубликатами, где, поскольку C не является таковым, потому что его четвертый элемент отличается и, следовательно, глубже быть уникальным, не дублировать, результирующий кадр данных должен выглядеть следующим образом:

Group     Value_1      Value_2
 A          17           0.1
 A          20           0.8
 A          22           0.9
 A          24           0.13


 C          17           0.1
 C          20           0.8
 C          22           0.9
 C          26           0.11    

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

1 Ответ

0 голосов
/ 30 октября 2018

Вы можете использовать groupby и агрегировать по agg с frozenset, а затем удалять дубликаты по drop_duplicates (по умолчанию всеми столбцы) и получить индексы - имена всех групп:

idx = df.groupby('Group').agg(frozenset).drop_duplicates().index
#alternative solution
idx = df.groupby('Group').agg(tuple).drop_duplicates().index

Или изменить на cumcount с set_index и unstack:

g = df.groupby('Group').cumcount()
idx = df.set_index(['Group',g]).unstack().drop_duplicates().index

Последний фильтр по boolean indexing с isin:

df = df[df['Group'].isin(idx)]
print (df)
   Group  Value_1  Value_2
0      A       17     0.10
1      A       20     0.80
2      A       22     0.90
3      A       24     0.13
8      C       17     0.10
9      C       20     0.80
10     C       22     0.90
11     C       26     0.11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...