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

如何为DataFrame按location补全缺失日期并填充默认值

解决DataFrame按[地区,日期]补全缺失日期并填充0的方法

假设你的DataFrame结构类似(第三列为需要补0的数值列,示例中命名为value):

locationdatevalue
97082017-12-2410
97082017-12-2715

步骤1:统一日期格式

先确保date列是datetime类型,否则无法生成连续日期序列:

import pandas as pd
df['date'] = pd.to_datetime(df['date'])

场景1:每个地区仅补全自身已有日期范围内的缺失

比如9708已有2017-12-24和2017-12-27,仅补这两个日期之间的25、26日:

# 设置复合索引(地区+日期)
df = df.set_index(['location', 'date'])

# 按地区分组,每个组生成自身的完整每日日期序列,缺失值补0
df = df.groupby('location').apply(
    lambda group: group.reindex(
        pd.date_range(
            start=group.index.get_level_values('date').min(),
            end=group.index.get_level_values('date').max(),
            freq='D'  # 按天生成连续日期
        ),
        fill_value=0
    )
).reset_index()

场景2:所有地区使用统一的全局日期范围

如果需要所有地区都覆盖整个数据集的最早到最晚日期(比如全数据集时间范围是2017-12-01至2017-12-31),所有地区都要补全这段时间的所有日期:

# 先获取全局的完整日期序列
full_dates = pd.date_range(start=df['date'].min(), end=df['date'].max(), freq='D')

# 设置复合索引后,将地区转成列,按全局日期重索引,再转回行并补0
df = df.set_index(['location', 'date'])
df = (df.unstack(level='location')  # 把location转成列
        .reindex(full_dates)        # 按全局日期补全缺失日期
        .stack(level='location')    # 把location转回行索引
        .fillna(0)                  # 缺失值填充0
        .reset_index())             # 重置索引为普通列

处理后,9708的缺失日期行将变为:

locationdatevalue
97082017-12-250
97082017-12-260

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:33:29