Python中非均匀时间索引DataFrame按时间窗口计算均值的实现方法
不均匀时间采样DataFrame的时间窗口均值计算方法
Pandas的rolling方法原生支持时间长度作为窗口,专门适配时间索引不均匀的场景,不需要手动实现循环逻辑,实现方式如下:
前置条件
- 确认DataFrame的索引为
DatetimeIndex类型,若不是先做转换 - 确认数据已按时间索引升序排列
实现代码
import pandas as pd # 转换索引为时间类型并排序 df.index = pd.to_datetime(df.index) df = df.sort_index() # 计算过去1秒窗口内的Value均值 df['mean'] = df['Value'].rolling(window='1s', closed='right').mean()
参数说明
window='1s':指定滚动窗口长度为1秒,pandas会自动根据时间索引计算每个点对应的窗口范围,不需要考虑采样点密度closed='right':指定窗口包含右端点(当前行的时间点),窗口范围等价于(当前时间-1秒, 当前时间],和你写的切片逻辑完全一致,该值为默认配置可省略
原循环代码的问题
你写的循环代码运行失败大概率是触发了链式索引的SettingWithCopyWarning,同时循环遍历的方式在数据量较大时性能极差,原生rolling方法经过C层面优化,执行效率远高于自定义循环。
内容的提问来源于stack exchange,提问作者Jarek
相关产品推荐
相关产品推荐

