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

Pandas按id分组补全季度日期并后向填充缺失数值的实现方法

实现方案

你可以直接用pandas原生的索引重对齐+分组填充的逻辑实现,代码简洁且性能优异,适配多列批量填充的场景:

完整可运行代码

import pandas as pd
from numpy import nan

# 构造示例数据
d = {'id': ['a', 'a', 'a', 'b', 'b'], 'date': ['2020-09-30', '2020-06-30', '2020-03-31', 
'2020-09-30', '2020-06-30'], 'amount': [1, 2, nan , 5, nan]}
df = pd.DataFrame(data=d)
df['date'] = pd.to_datetime(df['date'])

# 1. 配置参数:指定季度起始日期
start_quarter_date = '2019-12-31'
# 2. 生成完整的季度末日期序列:从起始日期到现有数据最大日期
full_quarter_dates = pd.date_range(start=start_quarter_date, end=df['date'].max(), freq='Q-DEC')
# 3. 生成所有id和日期的全组合,补全缺失行
full_df = df.set_index(['id', 'date']).reindex(
    pd.MultiIndex.from_product([df['id'].unique(), full_quarter_dates], names=['id', 'date'])
).reset_index()
# 4. 按id分组,每组按日期倒序排列后前向填充,即用最近的后续已知值填充更早的缺失值
full_df = full_df.sort_values(['id', 'date'], ascending=[True, False])\
                 .groupby('id', group_keys=False)\
                 .apply(lambda x: x.ffill())
# 可选:调整排序和示例输出完全一致
full_df = full_df.sort_values(['id', 'date'], ascending=[True, False]).reset_index(drop=True)

print(full_df)

逻辑说明

  • 用pd.date_range生成符合要求的完整季度序列,自动对齐季度末日期,不用手动处理日期格式
  • 通过MultiIndex.from_product直接生成所有id对应的全量日期组合,一行代码完成缺失行补全
  • 分组后按日期倒序+前向填充,刚好实现「用时间更近的已有值填充更早的缺失值」的需求,所有数值/非数值列都可以自动批量填充,不用单独处理附加列

内容的提问来源于stack exchange,提问作者Mustard Tiger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:54:06