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

如何为含多类别的pandas月度时间序列填充缺失值?

补全多产品月度时间序列的缺失值

解决步骤

要补全每个产品(id)的月度缺失记录,核心是生成包含所有日期和所有产品的全量索引,再与原始数据合并填充缺失值:

  1. 导入依赖库
import pandas as pd
import numpy as np
  1. 构造/读取原始数据并转换日期类型
# 构造示例数据(实际场景可替换为读取文件逻辑)
df = pd.DataFrame({
    'date': ['2022-01-01', '2022-01-01', '2022-02-01', '2022-03-01', '2022-03-01', '2022-05-01', '2022-06-01', '2022-06-01'],
    'id': ['a', 'b', 'a', 'a', 'b', 'b', 'a', 'b'],
    'units': [10, 100, 15, 30, 70, 60, 8, 90]
})
# 将date列转为datetime类型,确保时间序列处理正常
df['date'] = pd.to_datetime(df['date'])
  1. 生成完整月度日期范围
    从原始数据的最小日期到最大日期,生成连续的月度起始日期序列:
min_date = df['date'].min()
max_date = df['date'].max()
full_dates = pd.date_range(start=min_date, end=max_date, freq='MS')
  1. 创建全量(date, id)索引
    通过日期序列与唯一id列表的笛卡尔积,生成所有应该存在的记录索引:
unique_ids = df['id'].unique()
full_index = pd.MultiIndex.from_product([full_dates, unique_ids], names=['date', 'id'])
  1. 重新索引填充缺失值
    将原始数据对齐到全量索引,缺失的记录会自动填充np.nan:
df.set_index(['date', 'id'], inplace=True)
result = df.reindex(full_index).reset_index()

自定义填充值

如果需要用其他常量(比如0)代替np.nan,只需在reindex时指定fill_value参数:

result = df.reindex(full_index, fill_value=0).reset_index()

最终结果

执行上述代码后,得到的result就是你期望的补全后数据:

date id  units
0 2022-01-01  a   10.0
1 2022-01-01  b  100.0
2 2022-02-01  a   15.0
3 2022-02-01  b    NaN
4 2022-03-01  a   30.0
5 2022-03-01  b   70.0
6 2022-04-01  a    NaN
7 2022-04-01  b    NaN
8 2022-05-01  a    NaN
9 2022-05-01  b   60.0
10 2022-06-01  a    8.0
11 2022-06-01  b   90.0

内容的提问来源于stack exchange,提问作者Fernando Quintino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:25:38