使用pandas计算前滚平均值

nx7onnlm  于 2023-04-10  发布在  其他
关注(0)|答案(3)|浏览(181)

我需要在一个dataframe中计算一些前滚平均值,真的不知道从哪里开始。
我知道如果我想提前10天选择一个单元格,比如说我会选择df.shift(-10),但我想做的是计算提前10到15天的平均值。
所以我想的是df.rolling(-10,-15).mean(),如果我只是想计算一个移动平均线,在时间上回溯df.rolling(15,10).mean()会很好地工作,我确实想过只计算这样的平均值,然后以某种方式移动数据。
任何帮助都会很棒
非常感谢

htrmnn0y

htrmnn0y1#

您可以提前5天计算滚动平均值,然后shift再计算10个周期的滚动平均值。由于rolling中不允许负值,因此您可以反转轴,向后计算,然后再次反转(参见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)
kt06eoxx

kt06eoxx2#

上面的答案看起来不对。恕我直言,你不应该倒车和换挡。

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)

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

v64noz0r

v64noz0r3#

有一个新的方法来处理这个问题。这就是说,包括当前行。
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()

相关问题