Дубликаты не удаляются после удаления дублирующихся комбинированных значений строк - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь удалить дубликаты значений двух столбцов в df - я не получаю сообщение об ошибке, но код выполняется, но не удаляет дубликаты -

enter image description here Сначала я запускаю эту функцию ниже, чтобы удалить все возможные повторяющиеся комбинации, как показано ниже -

def remove_dup_combos(df):
u = df.filter(like='id').values
m = pd.DataFrame(np.sort(u, axis=1)).duplicated()
df = df[~m]

return df

При этом удаляются все дублирующиеся комбинации

enter image description here

Теперь я пытаюсь удалить все дубли в обоих идентификаторах с помощью

def remove_dups(df):
df = df.drop_duplicates(['id1', 'id2'],keep='first')

return df

но это не дает мне ожидаемый вывод, и вывод такой же, как второй вывод выше

спасибо!

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Кажется, вы хотите, чтобы дубликаты определялись на основе неупорядоченного идентификатора, который у Панд не имеет смысла.Например, эти две записи

df = pd.DataFrame([['a', 'b'], ['b', 'a']], columns=['id1', 'id2'])

  id1 id2
0   a   b
1   b   a

будут считаться разными, поскольку они не совпадают на id1 или id2.Если вы хотите проверить, является ли неупорядоченный набор обоих id s дубликатом, вы можете сравнить, является ли их минимум и максимум дубликатом.Например, добавив несколько временных столбцов,

df.assign(min_id = lambda x : x[['id1', 'id2']].min(axis=1),
          max_id = lambda x : x[['id1', 'id2']].max(axis=1)) \
    .drop_duplicates(subset=['min_id', 'max_id']) \
    .drop(['min_id', 'max_id'], axis=1)

, что в значительной степени соответствует решению NumPy в вопросе.

0 голосов
/ 18 марта 2019

При необходимости удалите одинаковые значения для столбцов:

df = df[df['id1'] != df['id2']]
...