【发布时间】:2021-11-26 08:53:58
【问题描述】:
我试图找到类似于移动平均线但不包括前一组值的东西 下面的 Excel 表快照显示了窗口为 2 的平均值。
我尝试在 pandas 中使用滚动和扩展命令,但它们包含以前的值。 有没有其他可以从 pandas 中使用的方法
【问题讨论】:
-
你能举一个“排除前一组值的移动平均线”的例子吗?我不是 100% 确定这意味着什么。
我试图找到类似于移动平均线但不包括前一组值的东西 下面的 Excel 表快照显示了窗口为 2 的平均值。
我尝试在 pandas 中使用滚动和扩展命令,但它们包含以前的值。 有没有其他可以从 pandas 中使用的方法
【问题讨论】:
执行此操作的一种简单方法是将列转换为列表,然后使用循环(或更准确地说是“列表理解”)计算移动平均值。
# Creating a DataFrame (like the one you have)
values_col = [i * 10 for i in range(10)]
df = pd.DataFrame({'values': values_col})
window_size = 2
hop_size = 2
n = len(df.index)
values_moving_average = [sum(df['values'].tolist()[i - window_size : i]) / window_size for i in range(window_size, n + 1, hop_size)]
然后您将在 values_moving_average 列表中获得所需的移动平均线:
# result
[5.0, 25.0, 45.0, 65.0, 85.0]
这里,window_size 是窗口的大小,而 hop_size 是一个变量,您可以使用它来指定两个连续窗口的第一个索引之间的距离。例如hop_size = 1,那么我们将得到列表中以下窗口的平均值:
(0, 10), (10, 20), (20, 30), ..., (80, 90)
但是,使用hop_size = 2,我们将拥有以下窗口:
(0, 10), (20, 30), (40, 50), ..., (80, 90)
【讨论】: