Python-Pandas-使用datetime列计算天数

dced5bon  于 2023-08-01  发布在  Python
关注(0)|答案(2)|浏览(108)

我有2列,createddate,closeddate,需要创建一个新的列,其中closeddate减去createddate,如果closeddate为null,则用sysdate估算它。
关闭日期和创建日期是datetime 64 [ns]数据类型。下面是示例 Dataframe

``df:

    createddate                      closeddate   
     30-06-2023  6.21.58 PM           03-07-2023  5.29.44 PM
     30-06-2023  6.18.16 PM

                            

Expected output

createddate                      closeddate                     Ageing_days
 30-06-2023  6.21.58 PM           03-07-2023  5.29.44 PM         3 
 30-06-2023  6.18.16 PM                                          18

字符串
我尝试使用下面的代码,但问题是第一行使用下面的代码,它需要2天而不是3天

Tried code:

df['aging_cal'] = (df['ClosedDate'].fillna(datetime.datetime.now()) - df['Created']).dt.days


o/p不正确

Expected output

createddate                      closeddate                     Ageing_days
 30-06-2023  6.21.58 PM           03-07-2023  5.29.44 PM         2 
 30-06-2023  6.18.16 PM                                          18


不知道上面的代码有什么问题。

oaxa6hgo

oaxa6hgo1#

看起来你需要先ceil你的Timedelta到一天:

df['aging_cal'] = (df['ClosedDate'].fillna(pd.Timestamp('now'))
                 - df['Created']).dt.ceil('D').dt.days

字符串
输出量:

Created          ClosedDate  aging_cal
0 2023-06-30 18:21:58 2023-07-03 05:29:44          3
1 2023-06-30 18:18:16                 NaT         18


可再现输入:

from pandas import Timestamp, NaT

df = pd.DataFrame({'Created': {0: Timestamp('2023-06-30 18:21:58'),
                               1: Timestamp('2023-06-30 18:18:16')},
                   'ClosedDate': {0: Timestamp('2023-07-03 5:29:44'),
                                  1: NaT}})

knsnq2tg

knsnq2tg2#

如果你想计算diff,而不考虑日期时间的HH:MM:SS部分,那么你可以在减去之前将时间戳转换为日期:

(df['ClosedDate'].fillna(datetime.now()).apply(pd.Timestamp.date) - 
     df['Created'].apply(pd.Timestamp.date)).dt.days

字符串
输出量:

0     3
1    18
dtype: int64

相关问题