如何在Pandas中高效补全缺失日期对应的行数据
Pandas补全分组缺失日期并填充默认值
处理步骤
- 转换日期格式:将
date列转为datetime类型,确保Pandas能正确识别日期维度。 - 生成完整日期范围:基于原数据的最小、最大日期,创建连续的日期序列。
- 构建完整索引笛卡尔积:结合所有唯一
key值和完整日期序列,生成包含所有可能组合的索引。 - 对齐数据填充缺失值:将原数据映射到完整索引,缺失的
value自动填充为0,最后重置索引得到目标格式。
完整代码
import pandas as pd # 初始化原DataFrame d1 = pd.DataFrame({ 'date': ['2023-12-01', '2023-12-03', '2023-12-04', '2023-12-01'], 'key': ['K0', 'K1', 'K0', 'K1'], 'value': [9, 3, 10, 8] }) # 转换date列为datetime类型 d1['date'] = pd.to_datetime(d1['date']) # 生成全局连续日期范围 date_range = pd.date_range(start=d1['date'].min(), end=d1['date'].max()) # 生成key与日期的笛卡尔积索引 full_index = pd.MultiIndex.from_product( [d1['key'].unique(), date_range], names=['key', 'date'] ) # 对齐原数据并填充缺失值 result = d1.set_index(['key', 'date']).reindex(full_index, fill_value=0).reset_index() # 输出结果 print(result)
输出结果
key date value 0 K0 2023-12-01 9 1 K0 2023-12-02 0 2 K0 2023-12-03 0 3 K0 2023-12-04 10 4 K1 2023-12-01 8 5 K1 2023-12-02 0 6 K1 2023-12-03 3 7 K1 2023-12-04 0
效率说明
MultiIndex.from_product属于向量化操作,比逐组循环处理的效率更高,适合大规模数据集场景。
内容的提问来源于stack exchange,提问作者mhsnk
相关产品推荐
相关产品推荐

