gpt4 book ai didi

python - 使用日期范围的 pandas 的滚动加权平均值

转载 作者:行者123 更新时间:2023-12-01 07:23:33 25 4
gpt4 key购买 nike

我想计算时间序列的滚动加权平均值以及在特定时间间隔内计算的平均值。例如,计算了 90 天窗口的滚动平均值(未加权):

import numpy as np
import pandas as pd

data = np.random.randint(0, 1000, (1000, 10))
index = pd.date_range("20190101", periods=1000, freq="18H")

df = pd.DataFrame(index=index, data=data)

df = df.rolling("90D").mean()

但是,当我应用加权函数(下面的行)时,我收到错误:“ValueError:无效窗口 90D”

df = df.rolling("90D", win_type="gaussian").mean(std=60)

另一方面,如果我将窗口设置为整数而不是偏移量,则加权平均值会起作用:

df = df.rolling(90, win_type="gaussian").mean(std=60)

使用整数对我的应用程序不起作用,因为观察结果在时间上分布不均匀。

两个问题:

  1. 我可以使用偏移量进行加权滚动平均值(例如“90D”或“3M”吗?

  2. 如果我可以用偏移量进行加权滚动平均值,那么 std 会怎样?引用当我指定 window="90D"和 win_type="gaussian"时;这是否意味着标准差为 60D?

最佳答案

好吧,我发现它还没有在 pandas 中实现。

看这里: https://github.com/pandas-dev/pandas/blob/v0.25.0/pandas/core/window.py

如果您遵循第 2844 行,您会看到当 win_type 不是 None 时,返回 Window 对象:

if win_type is not None:
return Window(obj, win_type=win_type, **kwds)

然后检查第630行窗口对象的validate方法,它只允许整数或类似列表的窗口

我认为这是因为 pandas 使用 scipy.signal 库来接收数组,因此它无法考虑数据随时间的分布。

您可以实现自己的加权函数并使用 apply,但其性能不会太好。

关于python - 使用日期范围的 pandas 的滚动加权平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57559762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com