2012-05-31 6 views
6

Qual è il modo più efficiente per calcolare la media ponderata in base al tempo di un TimeSeries in Pandas 0.8? Ad esempio, dire che voglio la media ponderata nel tempo di df.y - df.x come creato di seguito:Media ponderata nel tempo 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) 

mi sento come questa operazione dovrebbe essere molto facile da fare, ma tutto quello che ho provato coinvolge diverse conversioni di tipo disordinato e lento.

risposta

3

È possibile convertire gli interi df.index e utilizzarli per calcolare la media. C'è una proprietà di collegamento asi8 che restituisce una matrice di valori int64:

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

Grazie! Voglio pesare i valori in base alla durata, quindi ho usato 'np.average ((df.y - df.x) [: - 1], weights = np.diff (df.index.asi8))' – user2303