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
B
0 0.0
1 1.0
2 2.0
3 NaN
4 4.0
使用'triang'窗口类型的窗口长度为2的滚动总和
>>> df.rolling(2, win_type='triang').sum()
B
0 NaN
1 0.5
2 1.5
3 NaN
4 NaN
窗口长度为2的滚动总和,使用“高斯”窗口类型(请注意我们需要如何指定std)
>>> df.rolling(2, win_type='gaussian').sum(std=3)
B
0 NaN
1 0.986207
2 2.958621
3 NaN
4 NaN
窗口长度为2的滚动总和,min_periods默认为窗口长度
>>> df.rolling(2).sum()
B
0 NaN
1 1.0
2 3.0
3 NaN
4 NaN
与上述相同,但显式设置min_periods
>>> df.rolling(2, min_periods=1).sum()
B
0 0.0
1 1.0
2 3.0
3 2.0
4 4.0
与上述相同,但具有前视窗
>>> indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=2)
>>> df.rolling(window=indexer, min_periods=1).sum()
B
0 1.0
1 3.0
2 2.0
3 4.0
4 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
B
2013-01-01 09:00:00 0.0
2013-01-01 09:00:02 1.0
2013-01-01 09:00:03 2.0
2013-01-01 09:00:05 NaN
2013-01-01 09:00:06 4.0
与整数滚动窗口相反,这将滚动一个与时间段相对应的可变长度窗口。min_periods的默认值为1
>>> df.rolling('2s').sum()
B
2013-01-01 09:00:00 0.0
2013-01-01 09:00:02 1.0
2013-01-01 09:00:03 3.0
2013-01-01 09:00:05 NaN
2013-01-01 09:00:06 4.0