You need to enable JavaScript to run this app. pandas如何无需重索引基于上一行日期填充缺失日期?
优惠活动
大模型
产品
解决方案
定价
更多

pandas如何无需重索引基于上一行日期填充缺失日期?

Pandas 缺失日期(NaT)填充方案

需求说明

需要将DataFrame中date列的NaT值填充为上一行日期的后一天,且全程不使用重索引操作,示例输入如下:

date
0 2015-01-31
1        NaT
2 2015-02-02

期望输出:

date
0 2015-01-31
1 2015-02-01
2 2015-02-02

实现代码

步骤1:构造测试数据

import pandas as pd

df = pd.DataFrame({
    'date': [pd.to_datetime('2015-01-31'), pd.NaT, pd.to_datetime('2015-02-02')]
})

步骤2:核心填充逻辑

# 给非空日期分组,连续空值会和最近的前序非空值分到同一组
df['group_id'] = df['date'].notna().cumsum()
# 取每个分组的基准日期(即分组第一个非空日期)
df['base_date'] = df.groupby('group_id')['date'].transform('first')
# 计算分组内每行的偏移天数
df['day_offset'] = df.groupby('group_id').cumcount()
# 计算填充后的日期
df['date'] = df['base_date'] + pd.to_timedelta(df['day_offset'], unit='D')
# 清除中间辅助列
df.drop(columns=['group_id', 'base_date', 'day_offset'], inplace=True)

方案说明

  • 全程没有用到重索引操作,符合要求
  • 支持连续多个NaT的场景,会按顺序依次填充为基准日期+1天、+2天...
  • 时间复杂度为O(n),处理大数据量也不会有性能问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 03:18:01