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
相关产品推荐
相关产品推荐

