python - Pandas 日期时间 : find the correct year for the first date after a datetime

标签 python python-3.x pandas datetime dataframe

我从一个数据框开始,如下所示:

In [24]: df = pd.DataFrame(
    ...:     {'date1': ['10/02/2012', '10/02/2012', 'NA/NA/2014', 'NA/NA/2014', '01/02/2014'],
    ...:     'date2': ['10-Nov', '19-Oct', '26-Nov', '23-Oct', '14-Oct'],
    ...:     'date3': ['30/06/2011', '30/06/2011', '30/06/2013', '30/06/2013', 'NA']})
    ...:

In [25]: df
Out[25]:
        date1   date2       date3
0  10/02/2012  10-Nov  30/06/2011
1  10/02/2012  19-Oct  30/06/2011
2  NA/NA/2014  26-Nov  30/06/2013
3  NA/NA/2014  23-Oct  30/06/2013
4  01/02/2014  14-Oct  NA

我已成功将日期转换为日期时间对象。因此我有以下数据框:

In [26]: df["date1"] = pd.to_datetime(df["date1"], errors="coerce", dayfirst=True, infer_datetime_format=True)
    ...: df["date3"] = pd.to_datetime(df["date3"], errors="coerce", dayfirst=True, infer_datetime_format=True)
    ...: df["date2"] = pd.to_datetime(df["date2"], errors="coerce", dayfirst=True, format="%d-%b")
    ...: df
    ...:
Out[26]:
       date1      date2      date3
0 2012-02-10 1900-11-10 2011-06-30
1 2012-02-10 1900-10-19 2011-06-30
2        NaT 1900-11-26 2013-06-30
3        NaT 1900-10-23 2013-06-30
4 2014-01-02 1900-10-14        NaT

因为date2没有year编码设置全部year值为1900 .

但是,我需要 date2 中的第一个日期在date3之后达到与此日期时间关联 year .

另请注意:

何时 date3NaT我需要从date1向后看年份填写date2 。这可以在df.iloc[4,:]中看到。

所以我希望输出日期帧是:

       date1      date2      date3
0 2012-02-10 2011-11-10 2011-06-30
1 2012-02-10 2011-10-19 2011-06-30
2        NaT 2013-11-26 2013-06-30
3        NaT 2013-10-23 2013-06-30
4 2014-01-02 2013-10-14        NaT

这比仅仅使用 date3.year 更难因为有时date3是今年晚些时候(例如 30/12/2013 -> 2013-12-30 ),所以 date2将是明年的第一个日期(即 14-Oct -> 1900-10-14 -> 2014-10-14 )。

此外,当返回 nan 时我需要我的日期时间足够强大才能返回 NaT。

所以我需要找到下一个 year之后date3day-month 匹配在date2 。或者如果缺少,我需要 year之前date1day-month 匹配在date2 .

最佳答案

您可以应用 m-d 与 date2 和 date3 进行比较

pd.to_datetime(((df.date2.dt.strftime('%m%d')<df.date3.dt.strftime('%m%d')).astype(int)+df.date3.dt.year).astype(str)+'-'+df.date2.dt.strftime('%m-%d'))
Out[62]: 
0   2011-11-10
1   2011-10-19
2   2013-11-26
3   2013-10-23
4   2013-10-14
dtype: datetime64[ns]

关于python - Pandas 日期时间 : find the correct year for the first date after a datetime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51026643/

相关文章:

python - Pb 在时间序列索引上进行行选择

python - Django 用户表作为外键

python - 如何在 Ubuntu 上安装 PyOpenCV

python - 使用 Pandas 绘图方法设置图形大小时不一致

python-3.x - 在pydantic模型中使用@validator进行日期比较

python-3.x - Python 中列表的单行清理/操作

python - 如何在 python 中使用 pandas 获取所有重复项的列表?

python - 在 OpenERP 的薪资部分中扣除休假

python - Python 中的随机数生成方法有何不同?

python - 尝试在 Python 中加载 JSON 文件时,为什么会收到 JSONDecodeError 错误?