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
相关产品推荐
相关产品推荐

