【发布时间】:2018-04-26 09:49:45
【问题描述】:
我想将加权滚动平均值应用于大型时间序列,设置为 pandas 数据框,其中每天的权重都不同。这是数据框的子集
DF:
Date v_std vertical
2010-10-01 1.909 545.231
2010-10-02 1.890 538.610
2010-10-03 1.887 542.759
2010-10-04 1.942 545.221
2010-10-05 1.847 536.832
2010-10-06 1.884 538.858
2010-10-07 1.864 538.017
2010-10-08 1.833 540.737
2010-10-09 1.847 537.906
2010-10-10 1.881 538.210
2010-10-11 1.868 544.238
2010-10-12 1.856 534.878
我想使用 v_std 作为权重对垂直列进行滚动平均。我一直在使用加权平均函数:
def wavg(group, avg_name, weight_name):
d = group[avg_name]
w = group[weight_name]
try:
return (d * w).sum() / w.sum()
except ZeroDivisionError:
return d.mean()
但我不知道如何为滚动加权平均值实现这一点。我认为它类似于
df.rolling(window = 7).apply(wavg, "vertical", "v_std")
或使用rolling_apply?还是我必须一起编写一个新函数? 谢谢!
【问题讨论】:
-
简短的回答是,你不能,直接。但是,您可以对 numpy 使用跨步技巧。看这里:stackoverflow.com/questions/43636916/…
-
也许你在找
EWM.meanpandas.pydata.org/pandas-docs/stable/generated/…
标签: python pandas weighted-average