Python-Pandas- 使用日期时间列计算天数

Python-Pandas- Calculation of days using datetime columns

提问人:technical 提问时间:7/18/2023 更新时间:7/18/2023 访问量:38

问:

我有 2 列,createddate,closeddate,需要创建一个新列,其中 closeddate 减去 createddate,如果 closed date 为 null,则将其与 sysdate 进行插补。

关闭日期和创建日期为 datetime64[ns] dataype。 下面是示例数据帧

``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

不确定上面的代码有什么问题。

python pandas datetime-format

评论

0赞 mozway 7/18/2023
请为您的问题提供 AS EDIT 的输出,您的输入目前模棱两可df.to_dict()
0赞 technical 7/18/2023
创建列:{0: Timestamp('2023-06-30 18:21:58'), 1: Timestamp('2023-06-30 18:18:16')} 闭合列 :{0: Timestamp('2023-07-03 5:29:44'), 1: NaT} ..

答:

2赞 mozway 7/18/2023 #1

看起来您需要先将 Timedelta 带到当天:ceil

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}})
0赞 Maria K 7/18/2023 #2

如果要忽略日期时间的 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