看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
可以将偏移量(或可转换)传递给.rolling() 方法,并使其根据传递的时间窗口生成可变大小的窗口。 对于每个时间点,这包括在指示的时间增量内出现的所有先前值。
这对于非规则的时频索引尤其有用:
dft = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]},
index=pd.date_range('20130101 09:00:00',
periods=5,
freq='s'))
dft
'''
B
2013-01-01 09:00:00 0.0
2013-01-01 09:00:01 1.0
2013-01-01 09:00:02 2.0
2013-01-01 09:00:03 NaN
2013-01-01 09:00:04 4.0
'''
dft.rolling(2).sum()
'''
B
2013-01-01 09:00:00 NaN
2013-01-01 09:00:01 1.0
2013-01-01 09:00:02 3.0
2013-01-01 09:00:03 NaN
2013-01-01 09:00:04 NaN
'''
dft.rolling(2, min_periods=1).sum()
'''
B
2013-01-01 09:00:00 0.0
2013-01-01 09:00:01 1.0
2013-01-01 09:00:02 3.0
2013-01-01 09:00:03 2.0
2013-01-01 09:00:04 4.0
'''
dft.rolling('2s').sum()
在先前的版本中,如果针对行索引为时间日期型的数据框进行 rolling 滑窗操作使用 center 参数将每行记录作为窗口中心时会报错。pandas 1.3.0 版本解决了这个问题:
df = pd.DataFrame(
{"A": [0, 1, 2, 3, 4]},
index=pd.date_range("2020", periods=5, freq="1D")
)
df
'''
A
2020-01-01 0
2020-01-02 1
2020-01-03 2
2020-01-04 3
2020-01-05 4
'''
df.rolling("2D").mean()
'''
A
2020-01-01 0.0
2020-01-02 0.5
2020-01-03 1.5
2020-01-04 2.5
2020-01-05 3.5
'''
df.rolling("2D", center=True).mean()
'''
A
2020-01-01 0.5
2020-01-02 1.5
2020-01-03 2.5
2020-01-04 3.5
2020-01-05 4.0
'''
dft = dft.reset_index()
dft.rolling('2s', on='foo').sum()
将 .rolling() 与基于时间的索引一起使用非常类似于重采样。它们既对时间索引的 Pandas 对象进行操作又执行还原操作。
当使用带有偏移量的.rolling() 时。偏移量是时间增量。取得一个向后看的窗口,并汇总该窗口中的所有值(包括终点,但不包括起点)。这是结果中此时的新值。对于输入的每个点,这些都是时空可变大小的窗口,将获得与输入相同大小的结果。
当使用带有偏移量的.resample() 时。构造一个新的索引,它是偏移的频率。对于每个频率仓,在该时间仓中的时间倒退窗口内,从输入汇总点。聚合的结果是该频率点的输出。窗口在频率空间中是固定大小的。您的结果将具有介于原始输入对象的最小值和最大值之间的规则频率形状。
总而言之,.rolling() 是基于时间的窗口操作,而.resample() 是基于频率的窗口操作。
更新时间:2021-08-04 23:40:40 标签:pandas 时间 移动窗口