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

Pandas按ID分组补全日期并生成计算列时保留同日期重复行的问题

Pandas按分组补全日期同时保留原表重复行的解决方案

问题原因

你当前的代码仅生成了每个ID对应日期范围的单行映射表,没有和原表做关联匹配,因此会丢失原表中同一日期的重复行。

修正后代码

import pandas as pd

# 原始数据
data = {'ID':['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C'],
    'Date':['03/25/2021', '03/25/2021','03/27/2021', '03/29/2021', '03/10/2021','03/11/2021','03/15/2021','03/16/2021', '03/21/2021','03/25/2021']}
df = pd.DataFrame(data)

# 转换日期格式
df["Date"] = pd.to_datetime(df["Date"])

# 生成分组日期映射表:存储每个ID所有日期对应的属性
def generate_date_map(x):
    dr = pd.date_range(x["Date"].min(), x["Date"].max())
    out = pd.DataFrame({"Date": dr})
    out["Missing_Date"] = (~out["Date"].isin(x["Date"])).astype(int)
    out["StudyDay"] = range(1, len(dr)+1)
    return out

date_map = df.groupby("ID", group_keys=False).apply(generate_date_map).reset_index(drop=True)

# 右连接合并原表和映射表,保留原表所有行+补全缺失日期
result = df.merge(date_map, on=['ID', 'Date'], how='right')

print(result)

逻辑说明

  • 先单独生成每个ID的日期属性映射表,包含日期范围内所有日期对应的Missing_Date和StudyDay值
  • 通过右连接关联原表和映射表,既保留原表同一日期的所有重复行,又能补全分组内缺失的日期行,补全行的原表字段会自动填充为NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 21:54:04