Pandas 的时间加权平均值

Time-weighted average with Pandas

提问人:user2303 提问时间:6/1/2012 更新时间:6/2/2012 访问量:6458

问:

在 Pandas 0.8 中计算时间序列的时间加权平均值的最有效方法是什么?例如,假设我想要如下所示的时间加权平均值:df.y - df.x

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)

我觉得这个操作应该很容易做到,但我尝试过的所有操作都涉及几个混乱且缓慢的类型转换。

Python 时间序列 pandas

评论


答:

7赞 Wes McKinney 6/2/2012 #1

您可以转换为整数并使用它来计算平均值。有一个快捷方式属性,它返回 int64 值的数组:df.indexasi8

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

评论

6赞 user2303 6/2/2012
谢谢!我想按持续时间对值进行加权,所以我使用了np.average((df.y - df.x)[:-1], weights=np.diff(df.index.asi8))