如何基于CHURN_DATE列是否存在日期创建pandas二元CHURN_FLAG列?
解决方案
你的核心需求是根据CHURNdate列是否存在有效日期(非NaT)来标记客户流失状态,不需要引入额外的TODAY_DATE列,直接针对缺失值判断即可,以下是两种简洁的实现方式:
方法1:使用pandas内置方法
利用notna()判断日期是否有效,再转成整数类型:
df2['CHURNflag'] = df2['CHURNdate'].notna().astype(int)
方法2:使用numpy.where
同样基于是否非缺失值的逻辑,用np.where实现:
import numpy as np df2['CHURNflag'] = np.where(df2['CHURNdate'].notna(), 1, 0)
为什么你之前的代码失败?
你之前的逻辑是np.where(df2['CHURNdate']<df2['TODAY_DATE'], 0, 1),这里存在两个关键问题:
- 逻辑完全颠倒:如果客户已流失(有
CHURNdate且早于当前日期),应该标记为1,但你的代码会把这类情况设为0; NaT和任何日期比较都会返回False,所以缺失值会被错误标记为1,和你的期望相反。
直接判断CHURNdate是否为有效日期才是最准确的方式——只要存在流失日期就代表客户已流失,无需和当前日期比较。
内容的提问来源于stack exchange,提问作者Vince Chlortho
相关产品推荐
相关产品推荐

