2017-08-27 1 views
-1

Ich habe einen Pandas Datenrahmen mit einem DateTimeIndex: yyyy-mm-dd HH:MM:SSPandas: Clipping Zeit in DateTimeIndex je nach Datum

     A B C 
2015-08-08 16:00:00 1 2 3 
2015-08-08 16:00:08 4 5 6 
... 

I Reihen extrahieren möchte, dass HH:MM:SS in einem bestimmten Zeitbereich sind. Dieser Zeitbereich unterscheidet sich jedoch für jedes Datum yyyy-mm-dd.

Ist es möglich, eine Art Wörterbuch zu verwenden, das Datumsangaben den Zeitbereichen zuordnet und den DateTimeIndex dementsprechend abschneidet?

+0

Ich denke, dass alles, was Sie brauchen str.split ist ... – KingJohnno

+0

Hat jeder einzelne Tag eine andere Zeit Bereich, oder gibt es ein Muster für die Bereiche? (z. B. an Samstagen ist der Bereich von 8 bis 10 Uhr usw.) – payne

+0

Es gibt kein klares Muster. Es wird basierend auf statistischen Daten berechnet (für jeden Tag) – user3142067

Antwort

2

Sie können nach dict von Listen für Starts und Endzeiten mit Listenverständnis für list von gefiltert DataFrames von loc filtern.

Last concat sie ein:

print (df) 
        A B C 
2015-08-08 16:00:00 1 2 3 
2015-08-09 13:00:08 4 5 6 
2015-08-09 13:00:10 4 5 7 

d = {'2015-08-08':['16:00:00', '16:00:10'],'2015-08-09':['13:00:08', '13:00:20']} 

df1 = pd.concat([df.loc[k + ' ' + v[0] : k + ' ' + v[1]] for k, v in d.items()]) 
print (df1) 
        A B C 
2015-08-09 13:00:08 4 5 6 
2015-08-09 13:00:10 4 5 7 
2015-08-08 16:00:00 1 2 3 

Eine andere Lösung mit boolean indexing:

df1 = pd.concat([df[(df.index >= k + ' ' + v[0]) & 
        (df.index <= k + ' ' + v[1])] for k, v in d.items()]) 
print (df1) 
        A B C 
2015-08-09 13:00:08 4 5 6 
2015-08-09 13:00:10 4 5 7 
2015-08-08 16:00:00 1 2 3