#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
записей, и мы получаем их индексы.