您的位置:首页 >含缺失值的多列日期如何按组找最大有效日期
发布于2026-03-01 阅读(0)
扫一扫,手机访问

本文介绍如何在 Pandas 中对含 NaN 的多个日期列(如 `cop_date`、`fat_date`)进行条件过滤与分组聚合,确保每组内各日期列值均不小于基准列 `date`,并统一填充为该组内满足条件的最小有效日期。
在实际数据分析中,常需校验业务逻辑约束:例如某订单的确认日期(cop_date)和失效日期(fat_date)必须晚于主日期(date)。当原始数据存在缺失值(NaN)或违反约束的异常值时,直接取最大值会出错。此时需结合条件筛选、分组聚合与缺失值处理,实现稳健的日期对齐。
dates = ['date', 'cop_date', 'fat_date'] df[dates] = df[dates].apply(lambda x: pd.to_datetime(x, format='%d/%m/%Y'))
⚠️ 注意:若日期格式不统一(如混用 YYYY-MM-DD 和 DD/MM/YYYY),建议使用 format=None 让 pd.to_datetime() 自动推断,或先清洗再转换。
m1 = df['cop_date'] < df['date'] # True 表示 cop_date 过早,需剔除 m2 = df['fat_date'] < df['date'] # 同理
cols = ['id', 'ins_id'] # 分组依据(如订单ID + 保险子项)
df[['cop_date', 'fat_date']] = (
df.assign(
cop_date=df['cop_date'].where(~m1), # ~m1 → 保留 cop_date >= date 的值
fat_date=df['fat_date'].where(~m2)
)
.groupby(cols)[['cop_date', 'fat_date']]
.transform('min')
)? 关键点:~m1 是逻辑取反,表示“cop_date 不小于 date”,即合规;.where(~m1) 将不合规位置设为 NaT,再由 transform('min') 在组内求最小非空日期。
df[dates] = df[dates].apply(lambda x: x.dt.strftime('%d/%m/%Y'))最终结果中,每组 cop_date 和 fat_date 均被修正为该组内满足 >= date 约束的最小有效日期(若无可合规值则保持 NaN),逻辑清晰且可复现。
上一篇:Win11隐藏任务视图按钮方法
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9