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

Pandas如何按日分组使用最近邻值填充时序数据NaN缺失值

按日分组实现最近邻缺失值填充

核心逻辑是严格限定插值范围在单个自然日内,禁止跨日期取值填充,直接在按日分组的对象上调用最近邻插值即可,不需要用顺序向前/向后填充的方案。


实现代码

首先确认你的时间列已经被设置为DatetimeIndex类型,这是pandas时间分组正常运行的前置要求,之后运行如下代码:

df['precipitation'] = df['precipitation'].groupby(pd.Grouper(freq='D')).transform(
    lambda col: col.interpolate(method='nearest')
)

方案说明

  • 你之前使用的groupby(...).ffill().bfill()方案出现权重偏移的原因是:填充逻辑是先执行全组向前填充,早间生成的非空值会先覆盖组内前半段所有空值,后续反向填充时晚间值的覆盖范围被压缩,自然会过度放大早间预报的权重。
  • 直接全局调用interpolate(method='nearest')的问题是没有日期边界约束,会出现前一天晚间预报值填充到后一天凌晨、后一天早间值溢出到前一天深夜的问题,不符合日度预报的覆盖范围规则。
  • 上述分组插值的方案会把每天24小时数据作为独立的插值单元,每个空值只会取同日期内距离最近的非空预报值填充,完全匹配你给出的预期结果:
    • 2022-06-08当日,0点-13点距离早间0.03的预报点更近,统一填充为0.03;14点-23点距离晚间0.00的预报点更近,统一填充为0.00
    • 2022-06-09当日仅存在7点的0.01预报值,当日所有空值都填充为0.01,不会调用前一天的0.00值填充。

如果某一整天都没有任何有效预报值,该方案会保留当日的空值,不会跨天取值,符合日度预报独立的业务要求。如果需要处理全天空值的特殊场景,可以在分组插值后单独追加日维度的填充逻辑,不要和跨天填充逻辑混用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:54:25