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

如何为每个ID补全年内缺失日期的行数据

补全每个ID的全年日期缺失行(基于日期维度表)

方法一:SQL实现(数据库场景)

假设业务数据表名为fact_table,日期维度表名为date_dim(包含2022年全年的date字段,格式与业务表一致),按以下步骤操作:

  1. 生成ID与日期的全量组合:提取业务表中所有唯一ID,和日期维度表做交叉连接,得到每个ID对应全年所有日期的完整集合。
  2. 左连接补全数值:将全量组合与原业务表左连接,匹配date和id字段,原表中无对应数据的行自动填充value为NULL。

具体SQL代码:

SELECT
    dd.date,
    ids.id,
    ft.value
FROM
    (SELECT DISTINCT id FROM fact_table) AS ids
CROSS JOIN date_dim AS dd
LEFT JOIN fact_table AS ft
    ON dd.date = ft.date
    AND ids.id = ft.id
ORDER BY ids.id, dd.date;

方法二:Python Pandas实现(DataFrame场景)

如果数据以DataFrame形式处理,步骤如下:

  1. 转换date字段为日期类型,避免字符串匹配错误。
  2. 生成所有ID与日期的笛卡尔积,构建全量行集合。
  3. 左连接原数据,缺失的value自动填充为NaN(对应示例中的Null)。

具体代码示例:

import pandas as pd

# 读取原数据和日期维度表(假设已读取为df和date_dim_df)
df['date'] = pd.to_datetime(df['date'], format='%d/%m/%Y')
date_dim_df['date'] = pd.to_datetime(date_dim_df['date'], format='%d/%m/%Y')

# 获取所有唯一ID
unique_ids = df['id'].unique()

# 生成ID与日期的全量组合
full_index = pd.MultiIndex.from_product(
    [date_dim_df['date'], unique_ids],
    names=['date', 'id']
)
full_df = full_index.to_frame(index=False)

# 左连接原数据补全value
result_df = pd.merge(
    full_df,
    df,
    on=['date', 'id'],
    how='left'
)

# 转换日期格式并排序(可选)
result_df['date'] = result_df['date'].dt.strftime('%d/%m/%Y')
result_df = result_df.sort_values(by=['id', 'date']).reset_index(drop=True)

print(result_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:25:29