датафрейм дублируется условиями? - PullRequest
0 голосов
/ 27 февраля 2020

хорошо, у меня есть немного шумихи.

У меня есть фрейм данных, который может быть более 120 000 записей

Кадры будут похожи на это:

ID        UID     NAME       DATE
1        1234     Bob        02/02/2020
2        1235     Jim        02/04/2020
3        1234     Bob        
4        1234     Bob        02/02/2020
5        1236     Jan        20/03/2020
6        1235     Jim        

Мне нужно иметь возможность удалить все дубликаты; мне нужно проверить, есть ли в дубликатах дата, то есть та, или одна из тех, у которой есть дата, и сохранить все остальные. если ни в одном из дубликатов нет даты, просто используйте тот, который проще.

Я изо всех сил пытаюсь найти способ сделать это элегантно. Моя мысль: перебрать все записи, для каждой записи, создать временный DF и поместить в него все дубликаты, перебрать THAT df и, если я найду дату, сохранить индекс, а затем удалить каждую запись, которая не является этой записью .. но это кажется ОЧЕНЬ громоздким и медленным. какие-нибудь лучшие предложения ??

1 Ответ

0 голосов
/ 27 февраля 2020

Поскольку пробелами являются пустые строки '', вы можете сделать это:

(sample_df.sort_values(['UID','NAME','DATE'], 
                       ascending=(True, True, False))
          .groupby(['UID','NAME'])
          .first()
          .reset_index())

, что дает вам:

    UID     NAME    DATE
0   1234    Bob     02/02/2020
1   1235    Jim     02/04/2020
2   1236    Jan     20/03/2020

Обратите внимание на флаг ascending в sort_values , Pandas будет сортировать строки по их длине, и чтобы непустые DATE сортировались до пустых DATE (то есть ''), вам нужно отсортировать столбец в порядке убывания.

После сортируя, вы можете просто сгруппировать каждую пару (UID, NAME) и сохранить первую запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...