pandas中滑窗rolling的使用

函数原型和参数说明

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

window:表示时间窗的大小,注意有两种形式(int or offset)。如果使用int,则数值表示计算统计量的观测值的数量即向前几个数据。如果是offset类型,表示时间窗的大小。

min_periods:最少需要有值的观测点的数量,对于int类型,默认与window相等。对于offset类型,默认为1。

center:是否使用window的中间值作为label,默认为false。只能在window是int时使用。

例一

df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]})
df.rolling(3, min_periods=1).sum()
df.rolling(3, min_periods=1, center=True).sum()

例二

df = pd.DataFrame({'1': ['A1', 'A2', 'A1', 'A2', 'A2', 'A1', 'A2'],
                  '2': ['B1', 'B1', 'B1', 'B1', 'B1', 'B1', 'B1'],
                  'num': [1,2,1,3,4,2,1]}, 
                 index = [pd.Timestamp('20130101 09:00:00'),
                          pd.Timestamp('20130101 09:00:01'),
                          pd.Timestamp('20130101 09:00:02'),
                          pd.Timestamp('20130101 09:00:03'),
                          pd.Timestamp('20130101 09:00:04'),
                          pd.Timestamp('20130101 09:00:05'),
                          pd.Timestamp('20130101 09:00:06')])
# 首先我们先对groupby进行聚合(如果只有从A->B,那么不用聚合一个rolling就可以)
# 以9:00:04秒为例,由于时间窗是3s,默认的closed是right,所以我们相加04,03,02秒的num,共有4+3+0=7
df.groupby(['1', '2'])['num'].rolling('3s').sum()

参考 CSDN博主「weijian001」原文链接:https://blog.csdn.net/wj1066/article/details/78853717

posted on 2020-03-07 14:41  耀扬  阅读(1058)  评论(0编辑  收藏  举报

导航