Как удалить индекс дубликатов фрейма данных pandas

#python #python-3.x #pandas #dataframe #indexing

Вопрос:

Я использую df = df.drop_duplicates(["col1",["col2"]) фрейм данных pandas, но мне нужно знать индекс отброшенных строк, как я могу это сделать?

Ответ №1:

Используйте boolean indexing с маской DataFrame.duplicated только для индексов:

 df = pd.DataFrame({'col1':[1] * 4, 'col2':[2,2,3,2]})
print (df)
   col1  col2
0     1     2
1     1     2
2     1     3
3     1     2
    
print (df.drop_duplicates(["col1","col2"]))
   col1  col2
0     1     2
2     1     3
 

 mask = df.duplicated(["col1","col2"])
idx = df.index[mask]
print (idx)
Int64Index([1, 3], dtype='int64')
 

Или используйте Index.difference , если уже удалены дубликаты:

 df1 = df.drop_duplicates(["col1","col2"])
idx = df.index.difference(df1.index)
print (idx)
Int64Index([1, 3], dtype='int64')
 

Комментарии:

1. я думаю, было бы неплохо отметить, что последнее решение хорошо, так как оно не вычисляет дубликаты снова, но не работает, если индекс изначально не уникален, например, для df = df.append(df) .

Ответ №2:

Вы можете пойти на duplicated :

 dups = df.duplicated(["col1", "col2"])
dups[dups].index
 

Первая строка содержит логический массив, который отмечает, дублируется строка или нет. Вторая строка использует логическую индексацию против самой себя для выбора True записей, и мы получаем их индексы.