Удаление повторяющихся значений, которые не работают — ожидаемый bool?

#python-3.x #pandas #dataframe #duplicates #data-analysis

#python-3.x #pandas #фрейм данных #дубликаты #анализ данных

Вопрос:

Мой набор данных выглядит примерно так

введите описание изображения здесь

Я пытаюсь выполнить две функции для очистки df — сначала удалить все равные комбинации в df — это означает, что если одинаковые идентификаторы объединены вместе, как строка 1 и строка 3, это удаляет это, но затем, когда я пробую вторую функцию, которая затем удаляет все дубликаты в каждом столбце — она выполняется без ошибок, но фактические дубликаты не удаляются?

 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



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

  return df
  

Ответ №1:

Я считаю, что вам нужно, если нужно, удалить дубликаты по обоим столбцам:

 df = df.drop_duplicates(['id1', 'id2'])
  

Ваше решение другое — удаляйте дубликаты отдельно, сначала просматривая первый, а затем второй столбец:

 df = df.drop_duplicates(['id1'], inplace = False)
df = df.drop_duplicates(['id2'], inplace = False)
  

Параметр inplace = False по умолчанию находится в DataFrame.drop_duplicates , поэтому должен быть удален:

 df = df.drop_duplicates(['id1'])
df = df.drop_duplicates(['id2'])
  

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

1. Спасибо — можете ли вы взглянуть на мой отредактированный вопрос? этот ответ сработал, но, похоже, он не работает в сочетании, когда я сначала запускаю свою другую функцию, которая удаляет все комбинации, которые равны @jezrael

2. @Chris90 — Какой ожидаемый результат от ваших данных?

3. Например, в приведенном выше примере данных в моем вопросе — останется только последняя строка — я хочу удалить все строки, где идентификаторы представляют собой одну и ту же комбинацию, например строку 1 и строку 3 (где id1 и id2 — это одна и та же комбинация, только что переключенная для столбца, затем я также хочу удалить все дубликаты в col id1 и col id2 @jezrael

4. Я помечу этот пост как ответ, каким он был, и открою новый вопрос извините! @jerael