Duplikate in einer Spalte eines df löschen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Schokomuffin
User
Beiträge: 10
Registriert: Dienstag 20. Oktober 2020, 17:47

Hallo alle zusammen,

ich wollte mal fragen, wie man mithilfe der set() Funktion alle Duplikate in einer Spalte eines Dataframes löschen kann.
Damit meine ich nicht nur die Duplikate zu löschen, sondern alle Zeichenfolgen, die mehrfach vorkamen.

Mein Ziel ist es alle Kundennummer herauszufiltern, die 2020 neu entstanden sind.
Das heißt, ich will aus meiner Spalte alle anderen Nummern, die in den Jahren davor schon vorkamen rauslöschen, sodass nur noch die von 2020 übrig bleiben.

Code: Alles auswählen

set(df.[df.Jahr <= 2019].Kundennummern)
So würde ich ja alle mehrfachen Kundennummern löschen.
Allerdings bleiben die Anderen weiterhin bestehen und ich will nur die, die einmal vorkommen und keine Duplikate haben.

Ich hoffe man versteht mein Problem. :(

Danke auf jeden Fall schon mal im Vorraus!
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Entweder ich verstehe dich nicht richtig oder du denkst falsch herum. Nach deiner Beschreibung würde ich es doch eher so machen:

Code: Alles auswählen

customer_ids = df[df.Jahr==2020].Kundennummer
unique_ids = sorted(set(customer_ids))
Rückgaben muss man immer auch an Namen binden, um sie zu behalten. Falls dein gezeigter Code dem Original entspricht, dann verschwindet das Ergebnis vom set()-Aufruf halt im luftleeren Raum.

EDIT: Und natürlich gibt es auch etwas aus der Pandas-Bubble. :)

Code: Alles auswählen

unique_ids = customer_ids.sort_values().unique()
Und sort_values() kann man sich natürlich sparen, falls die Kundennummern bereits sortiert vorliegen.
Schokomuffin
User
Beiträge: 10
Registriert: Dienstag 20. Oktober 2020, 17:47

Naja, ich habe es so verstanden, dass ich die Kundennummern daraufüberprüfen soll, ob sie nicht nur 2020, sondern auch in den Jahren davor bereits im Register standen.
Wenn die Kundennummern nicht nur mit dem Jahr 2020, sondern auch 2019, 2018,... auftaucht, dann soll eben diese Kundennummer aus der Liste von den Nummern in 2020 gelöscht werden.
Sodass ich am Ende nur noch Kundennummern übrig habe, die 2020 erschienen sind und in keinem Jahr davor.

Deswegen macht es keinen Sinn, nur die Kundennummern von 2020 in die Liste zu packen, weil ich ja dann nicht weiß, ob sie schonmal in den Jahren davor erschienen sind.

Entschuldige bitte meine schlechte Erklärung. :(
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@Schokomuffin: hast Du Dir schon die verschiedenen Methoden von Sets angeschaut. Da gibt es eine, die genau das macht, was Du möchtest: alle Kundennummern aus dem Jahr 2020 ohne die Kundennummern aus den Jahren davor.
Antworten