Pandas时间序列补全:如何便捷填充缺失行并向前填充值?
分组补全时间序列缺失值的高效解决方案
问题场景
收集时间序列数据时,部分时间点无数据导致对应行缺失。示例原始数据如下:
import pandas as pd df_ = pd.DataFrame({'group': ['A']*3+['B']*3, 'time': [1,2,4,1,3,4], 'value': [100,105,111,200,234,222]})
需求:按group分组后补全所有缺失的时间行,并通过向前填充(ffill)补全value列的值。原方法需手动创建模板DataFrame再做左连接,步骤繁琐,尤其当分组多、时间范围广时成本很高。
更优解决方案
利用pandas的groupby结合reindex、ffill,无需手动构建模板,直接按组补全时间序列:
代码实现
# 定义所有需要覆盖的时间点(根据实际需求调整范围) all_times = range(1, 5) # 本例中为1-4的时间点 # 分组处理:补全时间索引 + 向前填充缺失值 df_final = df_.groupby('group').apply( lambda group: group.set_index('time') # 将time设为组内索引 .reindex(all_times) # 补全缺失的时间点 .ffill() # 向前填充value列 .reset_index() # 恢复time为普通列 ).reset_index(drop=True) # 移除分组产生的冗余索引 # 输出结果 print(df_final)
输出结果
group time value 0 A 1 100.0 1 A 2 105.0 2 A 3 105.0 3 A 4 111.0 4 B 1 200.0 5 B 2 200.0 6 B 3 234.0 7 B 4 222.0
方案优势
- 无需手动构建模板:避免了因分组数量多、时间范围大导致的模板编写繁琐问题
- 组内独立处理:分组操作保证每个组的时间补全和填充仅在组内进行,不会跨组干扰
- 代码简洁高效:逻辑连贯,链式调用完成核心操作,可读性和维护性更强
内容的提问来源于stack exchange,提问作者pd441
相关产品推荐
相关产品推荐

