Wie nach split ein pandas dataframe oder eine Serie pro Tag (evtl. mit einem iterator)
Habe ich eine lange Serie, wie zB.
import pandas as pd
index=pd.date_range(start='2012-11-05', end='2012-11-10', freq='1S').tz_localize('Europe/Berlin')
df=pd.DataFrame(range(len(index)), index=index, columns=['Number'])
Nun möchte ich alle extrahieren sub-DataFrames für jeden Tag zu Holen Sie sich die folgende Ausgabe:
df_2012-11-05: data frame with all data referring to day 2012-11-05
df_2012-11-06: etc.
df_2012-11-07
df_2012-11-08
df_2012-11-09
df_2012-11-10
Was ist der effektivste Weg, um dies zu vermeiden, überprüfen Sie, ob der index.Datum==give_date, was sehr langsam ist. Auch der Benutzer muss nicht wissen, ein Priorat der Reihe der Tage, die in den Rahmen.
Jede Spur, tun Sie dies mit einem iterator?
Meine aktuelle Lösung ist, aber es ist nicht so elegant und hat zwei Probleme, die unten definiert:
time_zone='Europe/Berlin'
# find all days
a=np.unique(df.index.date) # this can take a lot of time
a.sort()
results=[]
for i in range(len(a)-1):
day_now=pd.Timestamp(a[i]).tz_localize(time_zone)
day_next=pd.Timestamp(a[i+1]).tz_localize(time_zone)
results.append(df[day_now:day_next]) # how to select if I do not want day_next included?
# last day
results.append(df[day_next:])
Dieser Ansatz hat die folgenden Probleme:
- a=np.einzigartige(df.index.Datum) kann eine Menge Zeit
- df[day_now:day_next] enthält die day_next, aber ich muss es ausschließen im Bereich
InformationsquelleAutor Mannaggia | 2014-02-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht groupby?
Sollte Ihnen eine Liste von Daten-frames, wo jeder Daten-frame wird eines Tages von Daten.
Oder in einer Zeile:
Gotta love python!
ok, df.groupby([df.index.Jahr,df.index.Monat,df.index.Tag]) macht es zu 90% schneller ist, während sichergestellt wird, unterscheiden richtig zwischen den Tagen
InformationsquelleAutor Woody Pride
Wenn Sie möchten, group by date (AKA: Jahr+Monat+Tag), dann verwenden Sie
df.index.date
:Als
df.index.day
wird, verwenden Sie den Tag des Monats (D. H.: von 1 bis 31) für die Gruppierung, das könnte zu unerwünschtem Verhalten führen, wenn die Eingabe-dataframe Termine verlängern sich um mehrere Monate.InformationsquelleAutor Peque