使用 pandas 计算滚动前向平均值

Calculating Rolling forward averages with pandas

我需要计算数据框中的一些滚动前向平均值,但真的不知道从哪里开始。

我知道如果我想 select 一个单元格提前 10 天说我会做 df.shift(-10),但我想要做的是计算提前 10 到 15 天的平均值说.

所以我的想法是 df.rolling(-10,-15).mean(),如果我只是想计算一个移动平均线 df.rolling(15, 10).mean() 会起作用完美,我确实考虑过像这样计算平均值,然后以某种方式移动数据。

任何帮助都会很棒

非常感谢

你可以提前5天计算滚动平均值,然后shift that for 10 more periods. Since negative values in rolling are not allowed, you can invert the axis, calculate backwards, and then invert again (see How to use Pandas rolling_* functions on a forward-looking basis):

df = pd.DataFrame(np.random.rand(100, 2))
df[::-1].rolling(5).mean()[::-1].shift(-10)

以上答案看起来不正确。恕我直言,你不能反转和移动。

df = pd.DataFrame(np.random.randint(low=0, high=10, size=(100, 2))) # int easier to interpret
df[::-1].rolling(window=5, min_periods=1).mean()[::-1]

这也有效,但您丢失了最后 4 个值:

df.rolling(window=5, min_periods=1).mean().shift(-5)

滚动window任意移动(偏移)的更困难的问题可能需要以某种方式使用.shift()。

有一种新方法可以解决这个问题。也就是说包括当前行。

https://pandas.pydata.org/docs/reference/api/pandas.api.indexers.FixedForwardWindowIndexer.html

indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=2)

df.rolling(window=indexer, min_periods=1).sum()