如何对DataFrame中各分组时间序列按指定时间范围重采样补全
实现方案
你需要先生成「所有分组+指定时间范围内所有日期」的完整笛卡尔积索引,再重索引原表填充缺失值即可,操作步骤如下:
- 首先确保
date列已转换为datetime类型
import pandas as pd df['date'] = pd.to_datetime(df['date'])
- 生成你需要的全局时间范围(可自定义起止时间、频率)
# 示例为2020年1月到6月的每月首日,freq可按需求调整为'D'(日)、'QS'(季度首日)等 full_dates = pd.date_range(start='2020-01-01', end='2020-06-01', freq='MS')
- 生成所有分组和日期的完整组合索引,重索引原表后填充缺失值为0
# 获取所有唯一分组 all_groups = df['group'].unique() # 生成分组+日期的完整组合索引 full_index = pd.MultiIndex.from_product([all_groups, full_dates], names=['group', 'date']) # 重索引填充缺失值 result = df.set_index(['group', 'date']).reindex(full_index, fill_value=0).reset_index()
方案说明
和你之前用的groupby.resample逻辑不同,这个方案是基于你指定的全局时间范围生成全量的分组-日期组合,不管单个分组原本的日期区间是什么,都会补全整个指定时间范围内的所有日期,完全符合你的需求。
内容的提问来源于stack exchange,提问作者SqHu
相关产品推荐
相关产品推荐

