为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUWWW 2021-11-23 16:45:06
我有一个这样的数据框,datecol1              datecol22005-02-22          EmployeeNotFound2010-02-21          2010-02-22EmployeeNotFound    EmployeeNotFoundEmployeeNotFound    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-25ExpectedResult 的 dtype 将再次成为一个对象。
查看完整描述

2 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

将列转换为日期时间,获取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    ExpectedResult

0        2005-02-22  EmployeeNotFound        2005-02-22

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

2  EmployeeNotFound  EmployeeNotFound  EmployeeNotFound

3  EmployeeNotFound        2010-02-22        2010-02-22


查看完整回答
反对 回复 2021-11-23
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

您还可以使用 numpy,因为 numpy 函数更快。


import numpy as np

cond = df['datecol1'] != 'EmployeeNotFound'

df['ExpectedResult'] = np.where(cond, df['datecol1'], df['datecol2'])

这里首先datecol1将填充 的所有有效值,然后由第二列填充剩余的值datecol2。


查看完整回答
反对 回复 2021-11-23
  • 2 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信