Обновление списка внутри цикла for, который использует этот список - PullRequest
0 голосов
/ 27 мая 2019

Я работаю над фреймом данных с некоторыми значениями внутри. Проблема в том, что у меня могут быть дубликаты.

Я пошел по этой ссылке , но не смог найти то, что мне нужно

Я пытался создать список дубликатов, используя 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

И я хотел бы получить то же самое, но без ненужных дубликатов

1 Ответ

0 голосов
/ 27 мая 2019

Если вам нужны индексы недублированных идентификаторов:

df = pd.DataFrame({'ID':[0,1,1,3], 'B':[0,1,2,3]})
   B  ID
0  0   0
1  1   1
2  2   1
3  3   3

# List of indexes
non_duplicated = df.drop_duplicates(subset='ID', keep=False).index

df.loc[df.index.isin(non_duplicated)]
   B  ID
0  0   0
3  3   3



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...