Я работаю над фреймом данных с некоторыми значениями внутри. Проблема в том, что у меня могут быть дубликаты.
Я пошел по этой ссылке , но не смог найти то, что мне нужно
Я пытался создать список дубликатов, используя df.duplicated()
, который дает мне значения True
и False
для каждого индекса.
Затем для каждого индекса в этом списке, где результат равен True
, Я получаю идентификатор из df, используя df.loc[(df['id']== df['id'][dups]) ]
. В зависимости от этого результата я вызываю функцию giveID (), которая возвращает список индексов для удаления из списка дубликатов. Поскольку мне не нужно повторять дубликаты, которые должны быть удалены, возможно ли удалить эти индексы из списка дубликатов во время цикла for
, не прерывая все?
Вот пример моего df (дубликаты основаны на столбце id):
| id | type
--------------
0 | 312| data2
1 | 334| data
2 | 22 | data1
3 | 312| data8
#Here 0 and 3 are duplicates based on ID
Вот часть моего кода:
duplicates = df.duplicated(subset='column_name',keep=False)
duplicates = duplicates[duplicates]
df_dup = df
listidx = []
i=0
for dups in duplicates.index:
dup_id = df.loc[(df['id']== df['id'][dups])]
for a in giveID(dup_id):
if a not in listid:
listidx.append(a)
#here i want to delete the all listidx from duplicates inside the for loop
#so that I don't iterate over unnecessary duplicates
def giveID(id)
#some code that returns a list of indexes
Вот так выглядит duplicates
в моем коде:
0 True
1 True
582 True
583 True
605 True
606 True
622 True
623 True
624 True
625 True
626 True
627 True
628 True
629 True
630 True
631 True
...
1990368 True
1991030 True
И я хотел бы получить то же самое, но без ненужных дубликатов