如何基于终止日期将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 Name | col_1 | term_date | date_of_latest_logon | date_of_latest_logon_date |
|---|---|---|---|---|
| 122770 | -132 days +21:38:00 | 2020-09-28 | 2021-02-06 02:22:00 | 2021-02-06 |
| 1 | -122 days +00:41:00 | 2020-09-28 | 2021-01-27 23:19:00 | 2021-01-27 |
| 123526 | -30 days +12:04:00 | 2020-06-21 | 2020-07-21 11:56:00 | 2020-07-21 |
内容的提问来源于stack exchange,提问作者Hubsandspokes
相关产品推荐
相关产品推荐

