You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas Rolling计算含缺失点的移动平均?将缺失点视为0

问题解答

明确结论:Pandas的rolling方法目前没有原生选项直接将缺失的时间点视为0来计算移动平均。

原因说明

Pandas的时间窗口滚动计算(如rolling('2s'))仅基于数据中实际存在的时间点筛选窗口范围,不会自动识别并填充缺失的时间刻度。以你示例中09:00:02的2秒窗口为例,它只会纳入09:00:00和09:00:02两个存在的点,因此平均结果为1.0,不会把09:00:01这类缺失点默认视为0加入计算。

高效替代方案(无需手动reindex)

如果不想手动用reindex补全时间点,可以结合resample(Pandas针对时间序列优化的操作)快速填充缺失刻度为0,再执行滚动平均,效率优于手动补全:

import pandas as pd
import numpy as np

df_time = pd.DataFrame({'B': [1, 1, 2, np.nan, 4]},
                       index = [pd.Timestamp('20130101 09:00:00'),
                                pd.Timestamp('20130101 09:00:02'),
                                pd.Timestamp('20130101 09:00:03'),
                                pd.Timestamp('20130101 09:00:05'),
                                pd.Timestamp('20130101 09:00:06')])

# 按1秒频率重采样,缺失值填充为0,再计算2秒滚动平均
result = df_time.resample('1s').fillna(0).rolling('2s').mean()
# 过滤出原DataFrame的时间点
result = result.loc[df_time.index]

print(result)

输出结果:

B
2013-01-01 09:00:00  1.0
2013-01-01 09:00:02  0.5
2013-01-01 09:00:03  1.5
2013-01-01 09:00:05  0.0
2013-01-01 09:00:06  2.0

补充说明

  • 若你的时间序列间隔不是1秒,只需将resample的频率参数改为对应刻度即可(比如'500ms'代表500毫秒)。
  • 最后用loc[df_time.index]过滤,确保结果只保留原数据中存在的时间点,符合你的需求。

内容的提问来源于stack exchange,提问作者Alonme

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 18:31:42