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

QlikView:为指定ID补全缺失日期并填充前序日期数值

解决时间序列补全与前向填充问题

原始数据集

日期ID数值
2/4/1734.4
2/4/1796.2
2/9/1734.7
2/9/1747.4
2/9/1799.4
2/11/1739.7
2/11/17712.4

需求说明

需要补全2/4/17到2/11/17之间的所有缺失日期,并且每个ID在无记录的日期里,填充其前一次有记录的数值,直到下一条该ID的记录出现。

实现方案(Python pandas)

这是处理这类时间序列填充最常用的工具,步骤清晰易操作:

  1. 导入依赖并加载数据
import pandas as pd

# 加载原始数据
data = pd.DataFrame({
    '日期': ['2/4/17', '2/4/17', '2/9/17', '2/9/17', '2/9/17', '2/11/17', '2/11/17'],
    'ID': [3, 9, 3, 4, 9, 3, 7],
    '数值': [4.4, 6.2, 4.7, 7.4, 9.4, 9.7, 12.4]
})

# 将日期列转为datetime格式,方便后续生成连续日期序列
data['日期'] = pd.to_datetime(data['日期'], format='%m/%d/%y')
  1. 构建完整的日期-ID组合
# 获取所有唯一ID
unique_ids = data['ID'].unique()
# 生成从最早到最晚日期的每日连续序列
full_dates = pd.date_range(start=data['日期'].min(), end=data['日期'].max(), freq='D')
# 创建日期和ID的笛卡尔积,确保每个日期每个ID都有对应行
full_index = pd.MultiIndex.from_product([full_dates, unique_ids], names=['日期', 'ID'])
# 将原始数据转为以日期和ID为索引的格式
data_indexed = data.set_index(['日期', 'ID'])
  1. 合并数据并填充缺失值
# 合并到完整索引上,缺失的数值会显示为NaN
full_data = data_indexed.reindex(full_index).reset_index()
# 按ID分组,用前向填充(ffill)延续上一次的数值
full_data['数值'] = full_data.groupby('ID')['数值'].ffill()

最终结果

处理后的数据集完全符合需求,截取部分展示:

日期ID数值
2017-02-0434.4
2017-02-0496.2
2017-02-0534.4
2017-02-0596.2
2017-02-0634.4
2017-02-0696.2
2017-02-0734.4
2017-02-0796.2
2017-02-0834.4
2017-02-0896.2
2017-02-0934.7
2017-02-0999.4
2017-02-0947.4
.........

这个方法的核心是先构建全覆盖的日期-ID组合,再通过分组前向填充,确保每个ID的数值能准确延续到下一条记录出现前的所有日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:29:08