Ein Datenframe enthält nur ein paar Zeitstempel pro Tag und ich muss für jedes Datum den neuesten auswählen (nicht die Werte, der Zeitstempel selbst). die df sieht wie folgt aus:Wählen Sie den letzten Zeitstempel für jedes Datum
A B C
2016-12-05 12:00:00+00:00 126.0 15.0 38.54
2016-12-05 16:00:00+00:00 131.0 20.0 42.33
2016-12-14 05:00:00+00:00 129.0 18.0 43.24
2016-12-15 03:00:00+00:00 117.0 22.0 33.70
2016-12-15 04:00:00+00:00 140.0 23.0 34.81
2016-12-16 03:00:00+00:00 120.0 21.0 32.24
2016-12-16 04:00:00+00:00 142.0 22.0 35.20
ich es geschafft, zu erreichen, was ich durch die Definition der folgenden Funktion benötigt:
def find_last_h(df,column):
newindex = []
df2 = df.resample('d').last().dropna()
for x in df2[column].values:
newindex.append(df[df[column]==x].index.values[0])
return pd.DatetimeIndex(newindex)
, mit dem ich die Spalte Werte zu verwenden, als Filter angeben, um die gewünschten Zeitstempel zu erhalten . Das Problem hier ist im Fall von nicht eindeutigen Werten, die möglicherweise nicht wie gewünscht funktionieren.
Ein anderer Weg, die verwendet wird, ist:
grouped = df.groupby([df.index.day,df.index.hour])
grouped.groupby(level=0).last()
und dann die Zeitstempel rekonstruieren, aber es ist noch ausführlicher. Was ist der schlaue Weg?
Funktioniert gut, danke! eine Frage, ist das | ~ idx.duplicated (keep = False) wirklich benötigt? Ich bekomme das richtige boolean Array schon ohne es! – marpis
Dieser Code erhält alle eindeutigen Zeilen. Vielleicht in Ihren realen Daten nicht, aber wenn Sie Ihre Probe verwenden, 3. Zeile ohne es wird entfernt. – jezrael