2017-07-04 3 views
1

Ich habe umfangreiche Forschung auf das getan, so lesen Sie bitte vor dem Downvoting ..Wie lösche ich zusätzliche Tage, die von Pandas resample hinzugefügt wurden?

ich Pandas df mit Tickdaten haben, mit dem Index als datetime64[ns] möchte ich so diese Daten in Intervallen von 5 Minuten sampeln: price_5min = price.price.resample('5T').ohlc().between_time('09:00:00, '16:20:00')

Es funktioniert, aber es fügt Wochenenden und Feiertage zu den neuen Zeitreihen hinzu, die ich entfernen muss. Ich folge nicht den USA (oder einem anderen Standard-Feiertagskalender). Ich möchte nur Tage nicht im Original entfernen price df.

Der Index ist nicht eindeutig, viele Fälle mit demselben Zeitstempel. Pandas Version 0.20.1

Was ich versucht habe:

1) dropna(): Ich habe Zeilen mit Nans, die ich ffill benötigen, so wird dies nicht funktionieren.

2) price.index.difference (price_5min.index): Gibt mir alle Tickdaten, nicht die Tagesdaten.

3) price.index.date.difference (price_5min.index.date): Fehler: nicht so index.date Arbeit ein numpy.ndarray

4) Preis = price_5min ist, kann nur identisch vergleichen -markierten Datenrahmen Objekte

5) price.index = price_4min.index: Fehler: Lengths müssen

Empfohlene Logik zum Vergleich übereinstimmen, mein Problem zu lösen:

a) Irgendwie ist den Tag Daten in dem Vergleich zwei Datenrahmen und löschen basierend darauf, aber wie?

b) Entfernen Sie Tage ohne Abweichung, aber wie?

c) Die offensichtlich, dass ich nicht von (wahrscheinlich gedacht haben ..)

df Preis sieht wie folgt aus:

     price quantity 
time         
2016-06-15 16:19:20 29.85  429.6 
2016-06-15 16:19:20 29.85  65.6 
2016-06-15 16:19:20 29.85 1351.4 
2016-06-15 16:19:30 29.70  729.4 
2016-06-15 16:19:30 29.70  287.0 
2016-06-15 16:19:30 29.70  219.4 
2016-06-15 16:19:49 29.70  47.4 
2016-06-15 16:19:52 29.70  11.8 
2016-06-16 09:01:42 29.05  350.0 
2016-06-16 09:01:42 29.10  189.4 
2016-06-16 09:01:45 29.05  33.6 
2016-06-16 09:01:54 29.05  33.6 
... 

Jede Hilfe wäre sehr willkommen.

Antwort

1

ich glaube, Sie np.setdiff1d und numpy.in1d und Filter von boolean indexing verwenden können:

diffs = np.setdiff1d(price_5min.index.date, price.index.date)) 
df = price_5min[~np.in1d(price_5min.index.date, diffs] 

andere Lösungen mit DatetimeIndex.floor oder to_period:

dates = price.index.floor('D') 
dates_5min = price_5min.index.floor('D') 
df = price_5min[~dates_5min.isin(dates_5min.difference(dates))] 

dates = price.index.to_period('D') 
dates_5min = price_5min.index.to_period('D') 
df = price_5min[~dates_5min.isin(dates_5min.difference(dates))] 
+0

Sie da man! Prost. – cJc

+0

Danke auch. Übrigens, sehr schöne Frage und riesige Recherche, es ist super. Schöner Tag! – jezrael

Verwandte Themen