2012-05-31 13 views
6

Jaki jest najbardziej efektywny sposób obliczania średniej ważonej czasowo TimeSeries w Pandach 0.8? Na przykład, że chcę średni czas ważonych df.y - df.x jako stworzony poniżej:Średnia ważona w czasie z Pandami

import pandas 
import numpy as np 
times = np.datetime64('2012-05-31 14:00') + np.timedelta64(1, 'ms') * np.cumsum(10**3 * np.random.exponential(size=10**6)) 
x = np.random.normal(size=10**6) 
y = np.random.normal(size=10**6) 
df = pandas.DataFrame({'x': x, 'y': y}, index=times) 

czuję się jak ta operacja powinna być bardzo proste do zrobienia, ale wszystko próbowałem obejmuje kilka bałagan i powolne konwersji typu.

Odpowiedz

3

Możesz przekonwertować df.index na liczby całkowite i użyć tego do obliczenia średniej. Istnieje właściwość skrótu asi8, która zwraca tablicę wartości int64:

np.average(df.y - df.x, weights=df.index.asi8) 
+4

Dzięki! Chcę waga wartości przez czas trwania, więc użyłem 'np.average ((df.y - df.x) [: - 1], wagi = np.diff (df.index.asi8))' – user2303