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

如何为Pandas DataFrame填充缺失的月初首日记录以补齐完整日期序列

Pandas分组补全日期序列解决方案

前置处理

首先需要将Date列转换为Pandas datetime类型,这是所有日期处理逻辑的前提:

import pandas as pd

# 转换日期列格式
tst['Date'] = pd.to_datetime(tst['Date'])
uni_ind = ['% on Merchant','% on Customer','Merchants','Location']

你之前尝试的写法存在两处问题:一是resample默认仅从分组内已有最早日期开始生成序列,不会自动补全当月第一天到分组最早日期的空缺;二是语法上存在连续两个点的错误,重设索引的逻辑也冗余。

实现代码

通过分组自定义日期范围+重索引填充的方式实现需求,确保每个分组的日期从当月1日开始:

def fill_group_dates(group):
    # 取当前分组对应月份的第一天
    month_first_day = group['Date'].min().replace(day=1)
    # 生成从当月第一天到分组内最大日期的完整连续日期序列
    full_date_range = pd.date_range(start=month_first_day, end=group['Date'].max(), freq='D')
    # 重索引后用后向填充补全同组其他字段值
    return group.set_index('Date').reindex(full_date_range).bfill().reset_index(names='Date')

# 按指定字段分组后应用补全逻辑
result = tst.groupby(uni_ind, group_keys=False).apply(fill_group_dates).reset_index(drop=True)

逻辑说明

  • 每个分组先计算对应月份的第一天作为补全的起始日期
  • 生成完整连续的日期序列后通过重索引对齐,缺失的行默认填充NaN
  • bfill() 用分组内后序存在的有效值向前填充空值,完全匹配你要求的「缺失日期沿用同组现有值」的规则
  • 如果需要补全到当月最后一天,只需要把end=group['Date'].max()替换为end=group['Date'].max().to_period('M').to_timestamp(how='end').normalize()即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:39:03