#python #pandas #duplicates #multiple-conditions
#python #pandas #дубликаты #множественные условия
Вопрос:
Я пытаюсь идентифицировать дубликаты в фрейме данных на основе соответствия четырех полей: ‘dhid_y’, ‘from_y’, ‘to_y’ и ‘bound_y’. приведенный ниже код, использующий .дублированный в фрейме данных с «подмножеством», указывает на четыре рассматриваемых поля. Результатом должно быть то, что дубликаты помечаются как «true», а первое вхождение должно оставаться как «false». Я буду использовать эту информацию позже в сценарии. Однако обнаруживаются не все дубликаты. Кажется, работает при простом использовании dhid_y, но когда я добавляю дополнительные поля, кажется, что он плохо себя ведет — хотя и работает!
import pandas as pd
df_merged = pd.read_csv('merged_example_matched.csv')
conditions_2 = [(df_merged.duplicated(subset=['dhid_y', 'from_y', 'to_y', 'bound_y'], keep='first')) == True]
print(conditions_2)
Есть ли что-то очевидное, чего мне не хватает в том, как я использую этот дублированный параметр?
ожидается, что дублирование будет идентифицировано с помощью кода
код строк идентифицируется как дублированный
выделенные записи, которые должны были быть идентифицированы как дубликаты, но не были в моем коде
Комментарии:
1. Я до сих пор не использовал дублированную функцию — даже не знал, что она существует. Обычно я делаю a
groupby
для столбцов, связанных сcount()
агрегацией. Код будет выглядеть так, какdf_agg = df.groupby['dhid_y', 'from_y', 'to_y', 'bound_y'].count()
еслиcount >1
бы у вас был дубликат.2. Без воспроизводимого примера трудно сказать, почему вы видите дубликаты — может быть, есть дополнительные пробелы, которые делают строки «похожими» на дубликаты?
3. спасибо вам обоим, я обнаружил, что поля, которые я просматривал для дубликатов, были числовыми полями с различиями примерно в 0.0000000001 из-за некоторой проблемы с округлением. Применение округления к этим числовым полям до 3.d.p решило проблему, поэтому код теперь работает. Извиняюсь за недостаток данных, я новичок в написании сценариев, поэтому просто опубликовал скриншоты. Большое спасибо за ответ, я действительно ценю помощь.
Ответ №1:
Код был правильным, но его нужно было округлить до 3 д.п., прежде чем искать дубликаты в моих числовых полях. Между моими «совпадающими» полями была разница примерно в 0,00000001, поэтому они не рассматривались как дубликаты.