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

pandas中存在NaN值时按ID分组取最后日期的最佳方法

问题原因定位

你之前用data1.groupby(["ID"]).last()得不到正确结果,核心是pandas该方法的内置逻辑和你的需求不匹配:

  • 该方法会自动跳过分组内的NaN值,定位每个组里最后一个非空值
  • 当某个ID下所有date值都是NaN(比如案例里的ID 02),组内没有可被识别的非空值,这个ID会被直接从结果中剔除
  • 此外该方法是按值取最后一个非空项,不是按原始行顺序取每组的最后一行,遇到原数据日期排序混乱的场景还会出现结果偏差
适配需求的实现方法

直接按ID分组后,取每个分组内按原数据顺序排列的最后一行即可,全程不会主动跳过包含NaN的行:

result = data1.groupby("ID", as_index=False).tail(1)

效果说明

  • 完全匹配“每个ID一行、展示每个ID对应最后一条date值”的要求
  • 哪怕某ID对应的最后一行date是NaN,也会正常保留该ID的记录,不会出现剔除带NaN关联ID的问题
  • 严格按照原数据的行先后顺序取数,不会因为当前date是字符串格式、未转成datetime的问题打乱取数逻辑

可选后续操作

当前date列是字符串格式,拿到结果后如果需要做日期相关计算,可以直接转换格式,不会影响已保留的NaN记录:

# 匹配数据里的日/月/年格式转datetime,无法识别的值自动保留为缺失值
result["date"] = pd.to_datetime(result["date"], format="%d/%m/%Y", errors="coerce")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 18:45:08