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

如何用Python为每个ID补全缺失日期并填充0值?

按ID补全缺失日历日期并填充字段值的Pandas实现

假设你的原始DataFrame A是这样的示例结构:

import pandas as pd

# 示例数据
df_a = pd.DataFrame({
    'id': ['A', 'A', 'B', 'B'],
    'date_yyyymmdd': [20230101, 20230103, 20230102, 20230104],
    'amount': [100, 200, 150, 300],
    'hours': [8, 7, 6, 9]
})

第一步:转换日期格式

先把date_yyyymmdd字段转成Pandas可识别的日期类型,方便后续生成连续日期:

df_a['date_yyyymmdd'] = pd.to_datetime(df_a['date_yyyymmdd'], format='%Y%m%d')

第二步:生成每个ID的完整日期序列

先定义指定的起止日期,然后生成该范围内的所有日历日期,再和所有唯一ID做笛卡尔积,得到每个ID对应的完整日期组合:

start_date = pd.to_datetime('20230101', format='%Y%m%d')
end_date = pd.to_datetime('20230105', format='%Y%m%d')

# 生成起止日期之间的所有日期
date_range = pd.date_range(start=start_date, end=end_date)

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

# 创建ID和日期的笛卡尔积,得到完整的日期框架
full_dates = pd.MultiIndex.from_product([unique_ids, date_range], names=['id', 'date_yyyymmdd']).reset_index()

第三步:合并数据并填充缺失值

将原始数据和完整日期框架合并,对缺失的amount和hours字段填充0:

df_b = pd.merge(full_dates, df_a, on=['id', 'date_yyyymmdd'], how='left')
df_b[['amount', 'hours']] = df_b[['amount', 'hours']].fillna(0)

# 如果需要把日期转回原格式(整数类型的yyyymmdd),可以加这一步
df_b['date_yyyymmdd'] = df_b['date_yyyymmdd'].dt.strftime('%Y%m%d').astype(int)

运行完以上代码后,df_b就是你需要的结果:每个ID都包含了20230101到20230105的所有日期,缺失日期对应的amount和hours都被填充为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:01:19