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

如何在Pandas DataFrame中填充缺失时间值,为各用户补全整月范围并填零

示例数据

补全用户全月日期并填充缺失值方案

Excel/WPS操作

  • 首先提取所有不重复的用户ID,单独存放一列;再生成2019-04-01到2019-04-30的连续日期序列,单独存放另一列
  • 用Power Query(Excel)或合并查询(WPS)对用户ID列和日期列做笛卡尔积,得到每个用户对应全月30天的基准表
  • 用XLOOKUP函数关联基准表和原表,匹配不到的返回值设置为0即可,关联键为「用户ID+日期」
  • 公式参考:=XLOOKUP(基准表用户ID单元格&基准表日期单元格, 原表用户ID列&原表日期列, 原表待匹配列, 0)

Pandas 实现

核心逻辑是生成用户+全量日期的笛卡尔积基准,左连接原表后空值填0:

import pandas as pd

# 读取原数据,替换为你的实际列名和文件路径
df = pd.read_excel("data.xlsx")
user_col = "用户ID"
date_col = "日期"

# 生成全量日期和全量用户
all_dates = pd.date_range("2019-04-01", "2019-04-30")
all_users = df[user_col].unique()

# 生成全量基准表
full_df = pd.MultiIndex.from_product(
    [all_users, all_dates], names=[user_col, date_col]
).to_frame(index=False)

# 关联原表,空值填0
res = full_df.merge(df, on=[user_col, date_col], how="left").fillna(0)

SQL实现

以PostgreSQL语法为例,其他数据库仅需调整日期生成逻辑即可:

WITH all_dates AS (
    -- 生成4月整30天日期
    SELECT '2019-04-01'::DATE + GENERATE_SERIES(0, 29) AS dt
),
all_users AS (
    -- 提取所有唯一用户
    SELECT DISTINCT user_id FROM user_data
),
full_base AS (
    -- 笛卡尔积得到每个用户的全月日期基准
    SELECT * FROM all_users CROSS JOIN all_dates
)
SELECT 
    b.user_id,
    b.dt,
    COALESCE(t.col1, 0) AS col1, -- 将空值替换为0
    COALESCE(t.col2, 0) AS col2
FROM full_base b
LEFT JOIN user_data t ON b.user_id = t.user_id AND b.dt = t.dt
ORDER BY b.user_id, b.dt;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 20:06:04