2017-06-28 3 views
0

Ich habe einen Datenrahmen mit Duplikaten und Aktualisierungsdaten. Startdatum: Deduplizierung eines Pandas-Datenrahmens und Aufnahme des neuesten Datensatzes

Was ich suche ist eine Möglichkeit, Duplikate zu entfernen und den neuesten Datensatz zu nehmen. Ich weiß über drop_duplicates(), aber das löscht nur die Zeilen, die 100% identisch sind. So würde die gewünschte Ausgabe wie folgt aussehen: enter image description here

Ich habe versucht, Dinge wie diese:

grouped = df.groupby(['First Name', 'Middle Name','Last Name','Job Title','Active','Contractor']) 
new_data = grouped['Update Date'].agg(np.max).to_frame().reset_index() 

Aber es muss sein, einen besseren Weg, dies zu tun, als dann durch jede Spalte Gruppieren der max von der Einnahme Neues Datum. Was wäre, wenn ich nach bestimmten Spalten gruppieren und das maximale Aktualisierungsdatum nehmen möchte. ABER nehmen Sie auch die anderen Spalten, die nicht gruppiert wurden.

Zum Beispiel Gruppierung von First, Middle und Nachname und immer noch die gesamte Aufzeichnung des neuesten Datensatzes.

Input: enter image description here

gewünschte Ausgabe. enter image description here

Danke!

+0

Es könnte am besten sein, um einen Schlüssel zu haben, die eindeutig jede Person identifiziert. Ich gehe hier davon aus, dass die erste, mittlere und letzte Person die Person eindeutig identifizieren. Was passiert, wenn zwei Personen den gleichen Namen haben oder jemand einen Namenswechsel hat? Sie müssen zuerst über diese Dinge nachdenken. –

+0

So oder so würde ich einen Weg finden müssen, um den neusten Datensatz zu gruppieren und zu übernehmen – Zander

+1

Für zukünftige Referenz erhalten Sie schnellere Antworten, wenn Sie eine Codeversion Ihres Datenrahmens ('df = ....') angeben, damit wir kopieren können -füge es ein. Die Bilder sehen hübsch aus, helfen aber nicht dabei, einen Datenrahmen wie den Ihren zu erstellen. – chthonicdaemon

Antwort

1

Ungeachtet meines Kommentars können Sie zuerst den gesamten Datenrahmen bestellen und dann die erste Zeile jeder Gruppe übernehmen.

df = df.sort_values('Update Date', ascending=False) 
df.groupby(['First Name', 'Middle Name','Last Name']).first().reset_index() 
+0

Das hat wie ein Zauber funktioniert! – Zander

3

drop_duplicates nimmt subset Argument:

ident_fields = ['First Name', 'Middle Name','Last Name'] 
df = (df.sort_values('Update Date') 
     .drop_duplicates(subset=ident_fields, keep='last')) 
Verwandte Themen