比较两个包含文本的日期列

我有一个这样的数据框,


datecol1              datecol2

2005-02-22          EmployeeNotFound

2010-02-21          2010-02-22

EmployeeNotFound    EmployeeNotFound

EmployeeNotFound    2010-02-22

这两列的数据类型都是 Object。


我想比较这两列并获取每一列的最大日期。


所以预期的结果是


    datecol1            datecol2                  ExpectedResult

    2005-02-22          EmployeeNotFound          2005-02-22

    2010-02-21          2010-02-22                2010-02-22

    EmployeeNotFound    EmployeeNotFound          EmployeeNotFound

    EmployeeNotFound    2010-02-25                2010-02-25

ExpectedResult 的 dtype 将再次成为一个对象。


HUWWW
浏览 139回答 2
2回答

炎炎设计

将列转换为日期时间,获取max每个轴 1 并最后转换为字符串并替换NaTs:cols = ['datecol1', 'datecol2']df[cols] = df[cols].apply(pd.to_datetime, errors='coerce')df['ExpectedResult'] = df[cols].max(axis=1)df = df.astype(str).replace('NaT','EmployeeNotFound')#alternative solution#df = df.astype(str).mask(df.isnull(),'EmployeeNotFound')print (df)           datecol1          datecol2    ExpectedResult0        2005-02-22  EmployeeNotFound        2005-02-221        2010-02-21        2010-02-22        2010-02-222  EmployeeNotFound  EmployeeNotFound  EmployeeNotFound3  EmployeeNotFound        2010-02-22        2010-02-22

牛魔王的故事

您还可以使用 numpy,因为 numpy 函数更快。import numpy as npcond = df['datecol1'] != 'EmployeeNotFound'df['ExpectedResult'] = np.where(cond, df['datecol1'], df['datecol2'])这里首先datecol1将填充 的所有有效值,然后由第二列填充剩余的值datecol2。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python