Wie entfernt man Zeilen mit doppelten Indexwerten?
In dem unten stehenden Wetter-DataFrame geht ein Wissenschaftler manchmal zurück und korrigiert Beobachtungen - nicht, indem er die fehlerhaften Zeilen bearbeitet, sondern indem er eine doppelte Zeile an das Ende einer Datei anhängt.
Ich lese gerade einige automatische Wetterdaten aus dem Internet aus (die Beobachtungen erfolgen alle 5 Minuten und werden in monatlichen Dateien für jede Wetterstation zusammengefasst). Nach dem Parsen einer Datei sieht der DataFrame wie folgt aus:
Sta Precip1hr Precip5min Temp DewPnt WindSpd WindDir AtmPress
Date
2001-01-01 00:00:00 KPDX 0 0 4 3 0 0 30.31
2001-01-01 00:05:00 KPDX 0 0 4 3 0 0 30.30
2001-01-01 00:10:00 KPDX 0 0 4 3 4 80 30.30
2001-01-01 00:15:00 KPDX 0 0 3 2 5 90 30.30
2001-01-01 00:20:00 KPDX 0 0 3 2 10 110 30.28
Beispiel für einen doppelten Fall:
import pandas as pd
import datetime
startdate = datetime.datetime(2001, 1, 1, 0, 0)
enddate = datetime.datetime(2001, 1, 1, 5, 0)
index = pd.date_range(start=startdate, end=enddate, freq='H')
data1 = {'A' : range(6), 'B' : range(6)}
data2 = {'A' : [20, -30, 40], 'B' : [-50, 60, -70]}
df1 = pd.DataFrame(data=data1, index=index)
df2 = pd.DataFrame(data=data2, index=index[:3])
df3 = df2.append(df1)
df3
A B
2001-01-01 00:00:00 20 -50
2001-01-01 01:00:00 -30 60
2001-01-01 02:00:00 40 -70
2001-01-01 03:00:00 3 3
2001-01-01 04:00:00 4 4
2001-01-01 05:00:00 5 5
2001-01-01 00:00:00 0 0
2001-01-01 01:00:00 1 1
2001-01-01 02:00:00 2 2
Und deshalb brauche ich df3
zu werden:
A B
2001-01-01 00:00:00 0 0
2001-01-01 01:00:00 1 1
2001-01-01 02:00:00 2 2
2001-01-01 03:00:00 3 3
2001-01-01 04:00:00 4 4
2001-01-01 05:00:00 5 5
Ich dachte, dass das Hinzufügen einer Spalte mit Zeilennummern ( df3['rownum'] = range(df3.shape[0])
) würde mir helfen, die unterste Zeile für jeden Wert der DatetimeIndex
aber ich komme nicht weiter, wenn ich die group_by
o pivot
(oder ???) Anweisungen, damit das funktioniert.
2 Stimmen
Eine andere Möglichkeit, Duplikate zu erhalten, sind stündliche Daten in der Nacht, wenn die Uhren für die Sommerzeit zurückgestellt werden: 1 AM, 2, 3, 2, wieder 3, 4 ...
1 Stimmen
Wenn Sie sagen "Duplikate entfernen" Ihr Kontext ist hier implizit "behalte das Erste", d.h.
drop_duplicates(keep='first')
. (Das ist nicht immer der Fall, manchmal ist es schwieriger, aus den anderen Feldern herauszufinden, welche Zeile beibehalten werden soll, oder mehrere zusammenzuführen, indem man NAs aus verschiedenen Zeilen ausfüllt).