【发布时间】:2021-08-04 11:12:02
【问题描述】:
我有一个大数据框,我需要从中获取一组给定查询点的滑动时间窗口平均值。我尝试使用df.rolling,但这不允许我查询任意点。以下方法有效,但似乎效率低下,并且不允许矢量化使用:
import pandas as pd
df = pd.DataFrame({'B': range(5)},
index = [pd.Timestamp('20130101 09:00:00'),
pd.Timestamp('20130101 09:00:02'),
pd.Timestamp('20130101 09:00:03'),
pd.Timestamp('20130101 09:00:05'),
pd.Timestamp('20130101 09:00:06')])
query = pd.date_range(df.index[0], df.index[-1], freq='s')
time_window = pd.Timedelta(seconds=2)
f = lambda t: df[(t - time_window < df.index) & (df.index <= t)]["B"].mean()
[f(t) for t in query] # works but is slow
f(query) # throws ValueError length must match
也许这可以做得更好......
编辑:真正的应用程序具有在 30 到 90 秒之间随机出现的度量。有时有几天或几周没有数据的时期。 time_window 通常为 15 分钟。总体时间跨度为 10 年。
【问题讨论】:
标签: pandas numpy vectorization