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

如何基于终止日期将Timedelta列转换为过去的精确日期?

解决Timedelta转换为相对终止日期的精确日期问题

看来你是想根据用户的终止日期(term_date)和时间差(col_1的Timedelta值)计算出他们最后登录的精确日期对吧?先帮你搞定报错问题,再给你完整的实现方案。

为什么你的代码会报错?

你给Timedelta对象调用了x.date()方法,但Timedelta代表的是时间差,不是具体的日期/时间对象,它本身就没有date()这个属性,这就是你看到AttributeError: 'Timedelta' object has no attribute 'date'的原因。

正确的实现思路

你的需求本质是做一个简单的时间运算:终止日期 - 时间差(col_1)= 最后登录日期,核心是确保终止日期是datetime类型,然后直接和Timedelta做减法就行。

步骤1:确保终止日期列是datetime格式

如果你的term_date还不是datetime类型,先做转换:

import pandas as pd

df['term_date'] = pd.to_datetime(df['term_date'])

步骤2:计算精确的最后登录日期时间

直接用term_date减去col_1的Timedelta值,就能得到带时间的完整结果:

df['date_of_latest_logon'] = df['term_date'] - df['col_1']

步骤3(可选):只提取日期部分

如果你不需要时间信息,只想保留纯日期,可以用.dt.date提取:

df['date_of_latest_logon_date'] = df['date_of_latest_logon'].dt.date

示例验证

拿你提供的ID122770的数据举例:

  • term_date: 2020-09-28
  • col_1: -132 days +21:38:00

计算过程:
2020-09-28 - (-132 days +21:38:00) = 2020-09-28 +132 days -21:38:00
最终得到的date_of_latest_logon是2021-02-06 02:22:00,这就是精确的登录时间。

最终结果示例

运行上述代码后,你的DataFrame会变成类似这样的结构:

User Namecol_1term_datedate_of_latest_logondate_of_latest_logon_date
122770-132 days +21:38:002020-09-282021-02-06 02:22:002021-02-06
1-122 days +00:41:002020-09-282021-01-27 23:19:002021-01-27
123526-30 days +12:04:002020-06-212020-07-21 11:56:002020-07-21

内容的提问来源于stack exchange,提问作者Hubsandspokes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:58:07