我需要在一个dataframe中计算一些前滚平均值,真的不知道从哪里开始。我知道如果我想提前10天选择一个单元格,比如说我会选择df.shift(-10),但我想做的是计算提前10到15天的平均值。所以我想的是df.rolling(-10,-15).mean(),如果我只是想计算一个移动平均线,在时间上回溯df.rolling(15,10).mean()会很好地工作,我确实想过只计算这样的平均值,然后以某种方式移动数据。任何帮助都会很棒非常感谢
df.shift(-10)
df.rolling(-10,-15).mean()
htrmnn0y1#
您可以提前5天计算滚动平均值,然后shift再计算10个周期的滚动平均值。由于rolling中不允许负值,因此您可以反转轴,向后计算,然后再次反转(参见How to use Pandas rolling_* functions on a forward-looking basis):
shift
rolling
df = pd.DataFrame(np.random.rand(100, 2)) df[::-1].rolling(5).mean()[::-1].shift(-10)
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()。
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()
3条答案
按热度按时间htrmnn0y1#
您可以提前5天计算滚动平均值,然后
shift
再计算10个周期的滚动平均值。由于rolling
中不允许负值,因此您可以反转轴,向后计算,然后再次反转(参见How to use Pandas rolling_* functions on a forward-looking basis):kt06eoxx2#
上面的答案看起来不对。恕我直言,你不应该倒车和换挡。
这也可以工作,但你失去了最后4个值:
更困难的问题是任意移动(偏移)的滚动窗口可能需要以某种方式使用.shift()。
v64noz0r3#
有一个新的方法来处理这个问题。这就是说,包括当前行。
https://pandas.pydata.org/docs/reference/api/pandas.api.indexers.FixedForwardWindowIndexer.html