2012-05-31 73 views
6

¿Cuál es la forma más eficiente de calcular el promedio ponderado de tiempo de una serie de tiempo en Pandas 0.8? Por ejemplo, quiero decir que el promedio ponderado en el tiempo de df.y - df.x como creados a continuación:Promedio ponderado en el tiempo con Pandas

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) 

siento que esta operación debe ser muy fácil de hacer, pero todo lo que he intentado implica varias conversiones de tipo desordenado y lento.

Respuesta

3

Puede convertir df.index a números enteros y usar eso para calcular el promedio. Hay un acceso directo a la propiedad asi8 que devuelve una matriz de valores int64:

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

¡Gracias! Quiero ponderar los valores por las duraciones de tiempo, así que usé 'np.average ((df.y - df.x) [: - 1], weights = np.diff (df.index.asi8))' – user2303

Cuestiones relacionadas