2 votes

Suppression des doublons dans un cadre de données tout en conservant l'enregistrement le plus ancien

Mon cadre de données ressemble à ceci (il est indiqué que le format de l'heure est le suivant datetime64[ns, UTC] ):

name     job      feedback    question    time
a        j1       False       q1          2021-09-06 09:25:03.659000+00:00
a        j1       True        q1          2021-09-06 09:35:03.659000+00:00
a        j1       True        q2          2021-09-06 09:24:03.659000+00:00
b        j1       False       q1          2021-09-06 10:25:03.659000+00:00
b        j1       True        q1          2021-09-06 09:25:04.659000+00:00
c        j1       True        q3          2021-09-06 11:25:03.659000+00:00
c        j1       False       q3          2021-09-06 09:00:03.659000+00:00
d        j1       False       q2          2021-09-06 08:25:03.659000+00:00
d        j1       True        q2          2021-09-06 11:24:05.659000+00:00

Je veux seulement regarder les feedback qui ont été donnés la première fois a question a été tenté par chaque name . Donc :

    name     job      feedback    question    time
    a        j1       False       q1          2021-09-06 09:25:03.659000+00:00
    a        j1       True        q2          2021-09-06 09:24:03.659000+00:00
    b        j1       True        q1          2021-09-06 09:25:04.659000+00:00
    c        j1       False       q3          2021-09-06 09:00:03.659000+00:00
    d        j1       False       q2          2021-09-06 08:25:03.659000+00:00

J'ai essayé :

deduped = df.drop_duplicates(subset=["name", "job", "question"], keep="first") 

Mais cela ne fonctionne pas toujours car les enregistrements sont parfois dans un ordre aléatoire.

Est-il possible de trier d'abord par temps, puis de conserver ma ligne unique, comme ci-dessus ? Existe-t-il un autre moyen sûr de le faire ?

3voto

mozway Points 233

Votre intuition était correcte, vous pouvez sort_values :

deduped = (df.sort_values(by='time')
             .drop_duplicates(subset=["name", "job", "question"], keep="first")
          )

sortie :

  name job  feedback question                              time
7    d  j1     False       q2  2021-09-06 08:25:03.659000+00:00
6    c  j1     False       q3  2021-09-06 09:00:03.659000+00:00
2    a  j1      True       q2  2021-09-06 09:24:03.659000+00:00
0    a  j1     False       q1  2021-09-06 09:25:03.659000+00:00
4    b  j1      True       q1  2021-09-06 09:25:04.659000+00:00

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X