DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None) [source]
提供滚动窗口计算。
参数: | window : 移动窗口的大小。这是用于计算统计量的观测数。 每个窗口的大小都是固定的。 如果它是一个偏移量, 那么这将是每个窗口的时间段。 每个窗口的大小将根据时间段内的观察结果而变化。 这只对类似日期时间的索引有效。 如果传递了 则根据定义的 其他
窗口中需要有一个值的最小观察次数(否则结果为NA)。 对于由偏移量指定的窗口, 否则, center : 在窗口的中心设置标签。 win_type : 提供一个窗口类型。如果为 所有的点都是均匀加权。 请参阅下面的注释以获得更多信息。 on : 对于 是类似于 而不是 提供的整数列将被忽略并从结果中排除, 因为不使用整数索引计算滚动窗口。 axis : closed : 使区间在 或 对于基于偏移的窗口,默认为 对于固定的窗口,默认为 其余的情况没有实现固定窗口。 |
返回值: | DataFrame 针对特定操作的窗口或rolling子类 |
Notes
默认情况下,结果设置为窗口的右边缘。可以通过设置将其更改为窗口的中心center=True。
要了解有关偏移和频率字符串的更多信息,请参见此链接。
公认的win_types是:
boxcar
triang
blackman
hamming
bartlett
parzen
bohman
blackmanharris
nuttall
barthann
kaiser
(需要的参数:Beta)gaussian
(需要的参数:std)general_gaussian
(需要的参数:功率,宽度)slepian
(需要的参数:宽度)exponential
(需要参数:tau),中心设置为“None”
。
如果win_type=None
所有点均被加权。要了解有关不同窗口类型的更多信息,请参见scipy.signal窗口函数。
某些窗口类型需要传递其他参数。请参阅下面的第三个示例,了解如何添加其他参数。
例子
>>> df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]})>>> df B0 0.01 1.02 2.03 NaN4 4.0
使用'triang'窗口类型的窗口长度为2的滚动总和
>>> df.rolling(2, win_type='triang').sum() B0 NaN1 0.52 1.53 NaN4 NaN
窗口长度为2的滚动总和,使用“高斯”窗口类型(请注意我们需要如何指定std)
>>> df.rolling(2, win_type='gaussian').sum(std=3) B0 NaN1 0.9862072 2.9586213 NaN4 NaN
窗口长度为2的滚动总和,min_periods默认为窗口长度
>>> df.rolling(2).sum() B0 NaN1 1.02 3.03 NaN4 NaN
与上述相同,但显式设置min_periods
>>> df.rolling(2, min_periods=1).sum() B0 0.01 1.02 3.03 2.04 4.0
与上述相同,但具有前视窗
>>> indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=2)>>> df.rolling(window=indexer, min_periods=1).sum() B0 1.01 3.02 2.03 4.04 4.0
参差不齐的(意味着频率不是固定的),时间索引的DataFrame
>>> df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]},... index = [pd.Timestamp('20130101 09:00:00'),... pd.Timestamp('20130101 09:00:02'),... pd.Timestamp('20130101 09:00:03'),... pd.Timestamp('20130101 09:00:05'),... pd.Timestamp('20130101 09:00:06')])>>> df B2013-01-01 09:00:00 0.02013-01-01 09:00:02 1.02013-01-01 09:00:03 2.02013-01-01 09:00:05 NaN2013-01-01 09:00:06 4.0
与整数滚动窗口相反,这将滚动一个与时间段相对应的可变长度窗口。min_periods的默认值为1
>>> df.rolling('2s').sum() B2013-01-01 09:00:00 0.02013-01-01 09:00:02 1.02013-01-01 09:00:03 3.02013-01-01 09:00:05 NaN2013-01-01 09:00:06 4.0