Я хотел бы создать группы с помощью пользовательского идентификатора, а затем исключить группы, которые являются дубликатами в некоторых столбцах.
Например,
| id | A | B |
|----|-----|----|
| 1 | foo | 40 |
| 1 | bar | 50 |
| 2 | foo | 40 |
| 2 | bar | 50 |
| 2 | cod | 0 |
| 3 | foo | 40 |
| 3 | bar | 50 |
до
| id | A | B |
|----|-----|----|
| 1 | foo | 40 |
| 1 | bar | 50 |
| 2 | foo | 40 |
| 2 | bar | 50 |
| 2 | cod | 0 |
Здесь я сгруппировал по id, а затем удалил 3, потому что, если мы рассмотрим только столбцы A и B, они идентичны, тогда как в группе 2 есть несколько дублированных строк, но это не точная копия.
I 'мы пробовали зацикливаться на группах, но это очень медленно, хотя существует только около 12.000 групп.Одним из возможных осложнений является то, что группы имеют переменные размеры.
Вот решение, над которым я работал, но оно заняло много времени без видимых дублированных попаданий (которые, как я знаю, существует в этой базе данных)
grps = datafinal.groupby('Form_id')
unique_grps={}
first=True
for lab1, grp1 in grps:
if first:
unique_grps[lab1] = grp1
first=False
continue
for lab2, grp2 in unique_grps.copy().items():
if grp2[['A','B']].equals(grp1[['A','B']]):
print("hit")
continue
unique_grps[lab1] = grp1