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

Schreibe einen Kommentar