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

Python中如何使用np.where按条件从两列日期选取值生成新列

问题根因

你的代码存在两个核心错误,导致输出不符合预期:

  • 逻辑判断写反:需求是优先取date_2的值,date_2为空时才取date_1,但你写的判断条件是检查date_1是否等于NaT,判断对象、分支逻辑完全颠倒。
  • 空值判断方式错误:pd.NaT这类空值不能用==做相等判断,任何值(包括NaT本身)和NaT做==比较都会返回False,所以你写的判断条件永远不会触发你想要的分支。
正确实现方案

方案1:使用fillna(最推荐)

这个需求本质是用date_1的值填充date_2的空值,用pandas原生的fillna实现最简洁,且不会出现日期类型转换异常:

df["date_3"] = df["date_2"].fillna(df["date_1"])

运行后得到的date_3列取值完全符合要求:

  • 第1、3行date_2非空,保留date_2的日期值
  • 第2、4行date_2为NaT,自动填充对应行date_1的日期值

方案2:修正np.where写法

如果一定要用np.where实现,需要用isna()方法判断空值,同时调整判断对象和分支顺序:

import numpy as np
df["date_3"] = np.where(df["date_2"].isna(), df["date_1"], df["date_2"])

注意:np.where处理pandas日期列时,偶尔会把datetime类型转成整数或对象类型,如果遇到输出格式异常,优先换用方案1即可。

方案3:使用combine_first

pandas的combine_first方法专门用于按优先级补全列空值,效果和fillna完全一致:

df["date_3"] = df["date_2"].combine_first(df["date_1"])

内容的提问来源于stack exchange,提问作者Gerald Vasquez Aleman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:33:44