[英]How to create a rolling time window with offset in Pandas
我想对具有时间偏移的时间窗口内的记录应用一些统计信息。 我的数据如下所示:
lon lat stat ... speed course head
ts ...
2016-09-30 22:00:33.272 5.41463 53.173161 15 ... 0.0 0.0 511
2016-09-30 22:01:42.879 5.41459 53.173180 15 ... 0.0 0.0 511
2016-09-30 22:02:42.879 5.41461 53.173161 15 ... 0.0 0.0 511
2016-09-30 22:03:44.051 5.41464 53.173168 15 ... 0.0 0.0 511
2016-09-30 22:04:53.013 5.41462 53.173141 15 ... 0.0 0.0 511
[5 rows x 7 columns]
我需要600秒的时间窗口内的记录,步长为300秒。 例如,这些窗口:
start end
2016-09-30 22:00:00.000 2016-09-30 22:10:00.000
2016-09-30 22:05:00.000 2016-09-30 22:15:00.000
2016-09-30 22:10:00.000 2016-09-30 22:20:00.000
我看着熊猫滚动这样做。 但似乎它没有选择添加我上面描述的偏移量。 我是否正在忽略某些内容,还是应该为此创建自定义函数?
通过将DataFrame.resample
与DataFrame.shift
结合DataFrame.resample
,可以实现您想要的目标。
import pandas as pd
index = pd.date_range('1/1/2000', periods=9, freq='T')
series = pd.Series(range(9), index=index)
df = pd.DataFrame(series)
这将为您提供原始的时间序列(示例取自api docs DataFrame.resample )。
2000-01-01 00:00:00 0
2000-01-01 00:01:00 1
2000-01-01 00:02:00 2
2000-01-01 00:03:00 3
2000-01-01 00:04:00 4
2000-01-01 00:05:00 5
2000-01-01 00:06:00 6
2000-01-01 00:07:00 7
2000-01-01 00:08:00 8
现在按照步长重新采样(请参阅DataFrame.shift )。
sampled = df.resample('90s').sum()
这将为您提供步长大小不重叠的窗口。
2000-01-01 00:00:00 1
2000-01-01 00:01:30 2
2000-01-01 00:03:00 7
2000-01-01 00:04:30 5
2000-01-01 00:06:00 13
2000-01-01 00:07:30 8
最后,将采样的df移一级并将其与先前创建的df相加。 窗口大小是步长大小的两倍有帮助。
sampled.shift(1, fill_value=0) + sampled
这将产生:
2000-01-01 00:00:00 1
2000-01-01 00:01:30 3
2000-01-01 00:03:00 9
2000-01-01 00:04:30 12
2000-01-01 00:06:00 18
2000-01-01 00:07:30 21
可能会有更优雅的解决方案,但我希望这会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.