在建模过程中,我们常常需要需要对有时间关系的数据进行整理。比如我们想要得到某一时刻过去30分钟的销量(产量,速度,消耗量等),传统方法复杂消耗资源较多,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类型,表示时间窗的大小。pandas offset相关可以参考这里。
min_periods:最少需要有值的观测点的数量,对于int类型,默认与window相等。对于offset类型,默认为1。
freq:从0.18版本中已经被舍弃。
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() B B1 B2 0 0.0 0.0 1.0 1 1.0 1.0 3.0 2 2.0 3.0 3.0 3 NaN 3.0 6.0 4 4.0 6.0 4.0
win_type:窗口类型,默认为None一般不特殊指定,了解支持的其他窗口类型,参考这里。
on:对于DataFrame如果不使用index(索引)作为rolling的列,那么用on来指定使用哪列。
closed:定义区间的开闭,曾经支持int类型的window,新版本已经不支持了。对于offset类型默认是左开右闭的即默认为right。可以根据情况指定为left both等。
axis:方向(轴),一般都是0。
举例
一个简单的场景,从A向B运送东西,我们想看一下以3秒作为一个时间窗运送的量。
# A地有两个仓库,都运往B。 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')]) # 1 2 num # 2013-01-01 09:00:00 A1 B1 1 # 2013-01-01 09:00:01 A2 B1 2 # 2013-01-01 09:00:02 A1 B1 1 # 2013-01-01 09:00:03 A2 B1 3 # 2013-01-01 09:00:04 A2 B1 4 # 2013-01-01 09:00:05 A1 B1 2 # 2013-01-01 09:00:06 A2 B1 1
使用rolling进行计算
# 首先我们先对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() # 1 2 # A1 B1 2013-01-01 09:00:00 1.0 # 2013-01-01 09:00:02 2.0 # 2013-01-01 09:00:05 2.0 # A2 B1 2013-01-01 09:00:01 2.0 # 2013-01-01 09:00:03 5.0 # 2013-01-01 09:00:04 7.0 # 2013-01-01 09:00:06 5.0 # Name: num, dtype: float64
由于使用groupby,所以最后的结果是MultiIndex,想使用正常格式在DataFrame上使用reset_index()即可。
以上这篇对pandas中时间窗函数rolling的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
pandas,rolling
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]