Python中多元时间序列缺失值按同星期同时刻均值填补的实现方法
基于「星期+小时」分组的缺失值填充实现
- 第一步:统一转换时间索引格式
先将字符串格式的时间索引转为pandas可识别的datetime类型,确保能提取时间维度属性,执行代码:df.index = pd.to_datetime(df.index)
注:你示例里的时间写法存在格式瑕疵(如24:00:00、日/月顺序颠倒的日期),pandas转格式时会自动兼容修正,不需要手动逐行调整。 - 第二步:构造匹配需求的分组键
不需要新建临时列,直接从DatetimeIndex提取两个核心分组维度:- 星期维度:用
index.dayofweek获取取值(0对应周一,6对应周日) - 时刻维度:用
index.hour提取对应小时数
- 星期维度:用
- 第三步:执行分组计算与缺失值填充
核心逻辑为:按「同星期+同小时」对数据分组,计算每组内各账户字段的非缺失值均值,再用该均值匹配填充组内的缺失位置。直接通过transform实现同形状的均值映射,避免手动匹配错位:# 计算每个「星期+小时」分组下各字段的均值,返回与原df行列完全一致的结果表 group_mean = df.groupby([df.index.dayofweek, df.index.hour]).transform('mean') # 用分组均值覆盖原数据中的缺失值 df = df.fillna(group_mean)
场景匹配验证:以你提到的2019-02-01(周五)凌晨2点的account1缺失值为例,系统会自动匹配dayofweek=4(周五)、hour=2的分组,取该分组下所有历史非缺失的account1数值计算均值完成填充,完全符合预设的业务规则。
补充说明
- 若某一个「星期+小时」分组下的所有记录均为缺失值,对应位置填充后仍会保留NaN,可按需追加兜底逻辑,比如用整列均值二次填充:
df = df.fillna(df.mean()) - 该方法完全规避了多项式插值的相邻点拟合逻辑,不依赖时间序列的前后值关系,严格按照周期同位置的统计值完成填充,适配当前业务场景的要求。
内容的提问来源于stack exchange,提问作者m_ana
相关产品推荐
相关产品推荐

