Python pandas.DataFrame.rolling函数方法的使用

Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。本文主要介绍一下Pandas中pandas.DataFrame.rolling方法的使用。

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None) [source]

提供滚动窗口计算。

参数:

window int, offset, 或 BaseIndexer subclass

移动窗口的大小。这是用于计算统计量的观测数。

每个窗口的大小都是固定的。

如果它是一个偏移量,

那么这将是每个窗口的时间段。

每个窗口的大小将根据时间段内的观察结果而变化。

这只对类似日期时间的索引有效。

如果传递了BaseIndexer子类,

则根据定义的get_window_bounds方法计算窗口边界。

其他rolling关键字参数,即min_period

centerclosed将被传递给get_window_bounds

min_periods :int, 默认None

窗口中需要有一个值的最小观察次数(否则结果为NA)。

对于由偏移量指定的窗口,min_period默认为1。

否则,min_period将默认为窗口的大小。

center :bool, 默认为 False

在窗口的中心设置标签。

win_type :str, 默认为 None

提供一个窗口类型。如果为None

所有的点都是均匀加权。

请参阅下面的注释以获得更多信息。

on :str, 可选

对于DataFrame

是类似于datetime的列或用于计算rolling窗口的多索引级别,

而不是DataFrame的索引。

提供的整数列将被忽略并从结果中排除,

因为不使用整数索引计算滚动窗口。

axis intstr, 默认为 0

closed :str, 默认为 None

使区间在 ‘right’, ‘left’ ,‘both’ 

‘neither'端点上关闭。

对于基于偏移的窗口,默认为“right”

对于固定的窗口,默认为'both'

其余的情况没有实现固定窗口。

返回值:

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

推荐阅读
cjavapy编程之路首页