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

如何用Pandas按分组填充缺失日期及前序有效值?

解决Pandas按组填充缺失日期并前向填充有效值的问题

没问题,这是处理时间序列数据时非常典型的需求,我来给你一个清晰的实现方案,附带详细解释:

步骤1:预处理日期列

首先要确保你的date列是Pandas能识别的datetime类型,否则无法正确生成连续日期序列:

import pandas as pd

# 你的原始数据
dates=['2020-12-01','2020-12-04','2020-12-05', '2020-12-01','2020-12-04','2020-12-05']
symbols=['ABC','ABC','ABC','DEF','DEF','DEF']
v=[1,3,5,7,9,10]
df= pd.DataFrame({'date':dates, 'g':symbols, 'v':v})

# 转换日期列类型
df['date'] = pd.to_datetime(df['date'])

步骤2:定义分组填充函数

我们需要为每个g分组单独生成连续的日期范围,并用**前向填充(ffill)**补全缺失的v值:

def process_group(group):
    # 生成当前分组的完整日期序列(从最早到最晚,按天频率)
    full_dates = pd.date_range(start=group['date'].min(), end=group['date'].max(), freq='D')
    # 将分组数据的索引设为date,重新索引到完整日期序列,用前值填充缺失
    group_filled = group.set_index('date').reindex(full_dates).ffill()
    # 重置索引,把date变回普通列
    group_filled = group_filled.reset_index().rename(columns={'index': 'date'})
    return group_filled

步骤3:应用分组处理

用groupby.apply将函数应用到每个分组,最后整理索引:

result_df = df.groupby('g').apply(process_group).reset_index(drop=True)

验证结果

打印result_df就能看到你想要的效果:

date    g     v
0  2020-12-01  ABC   1.0
1  2020-12-02  ABC   1.0
2  2020-12-03  ABC   1.0
3  2020-12-04  ABC   3.0
4  2020-12-05  ABC   5.0
5  2020-12-01  DEF   7.0
6  2020-12-02  DEF   7.0
7  2020-12-03  DEF   7.0
8  2020-12-04  DEF   9.0
9  2020-12-05  DEF  10.0

补充说明

  • ffill()会用最近的非缺失值填充,正好符合你“前序有效值”的需求;
  • 如果需要后向填充可以用bfill(),不过这里显然前向更合适;
  • freq='D'表示按天生成序列,你可以根据需求改成小时('H')、周('W')等其他频率。

内容的提问来源于stack exchange,提问作者Stack Overflow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:35:12