Ich versuche herauszufinden, wie viel Zeit zwei Zeitreihen mit der Panda-Pandas-Bibliothek überlappen. Die Daten sind nicht synchron, so dass die Zeiten für jeden Datenpunkt nicht aufeinander abgestimmt sind. Hier ist ein Beispiel:
Zeitreihe 1
%Vor%Zeitreihe 2
%Vor%Unter der Annahme, dass die Reihe ihren Wert bis zur nächsten Änderung behält, was ist der effizienteste Weg, um den Prozentsatz der Zeit zu bestimmen, dass sie denselben Wert haben?
Beispiel
Berechnen wir die Zeit, in der sich diese Zeitreihen überschneiden, beginnend bei 11: 50: 07.000537 und endend bei 2016-10-05 11: 50: 57.000444 0.75, da wir Daten für beide Zeitreihen für diesen Zeitraum haben. Zeit, dass es Überschneidungen gibt:
Das Ergebnis (4.997955 + 12.000096 + 0.000558 + 0.000112) / 49.999907 = 34%
Eines der Probleme ist, dass meine aktuelle Zeitreihe viel mehr Daten wie 1000 - 10000 Beobachtungen hat und ich viel mehr Paare führen muss. Ich dachte daran, eine Reihe vorwärts zu füllen und dann einfach die Zeilen zu vergleichen und die Gesamtzahl der Übereinstimmungen über die Gesamtzahl der Zeilen zu teilen, aber ich denke nicht, dass dies sehr effizient wäre.
Setup
Erstellen Sie 2 Zeitreihen
TL; DR
%Vor%Erklärung
Buildbasis pd.DataFrame
df
pd.concat
zum Ausrichten von Indizes ffill
, um Werte nach vorne zu propagieren dropna
, um die Werte einer Reihe vor der anderen zu löschen berechnen 'duration'
vom aktuellen Zeitstempel zum nächsten
Überlappung berechnen
df.s1.eq(df.s2)
gibt boolesche Reihen von s1
überlappt mit s2
groupby
über der booleschen Reihe, um die Gesamtdauer zu aggregieren, wenn True
und False
Prozentsatz der Zeit mit demselben Wert
%Vor%Cooles Problem. Ich Brute gezwungen dies ohne Verwendung von Pandas oder numpy, aber ich habe Ihre Antwort (danke für die Ausarbeitung). Ich habe es an nichts anderem getestet. Ich weiß auch nicht, wie schnell es ist, da es nur einmal jeden Datenrahmen durchläuft, aber keine Vektorisierung durchführt.
%Vor%Ausgabe:
%Vor%Tags und Links python performance pandas time-series pandas-groupby