如何将 python 内的天数转换为小时数

How to convert No of days to Hours in python

我有一个Age.xlsx,我在其中计算事件发生的天数(我必须找到以小时为单位的粒度级别)我遇到了一种情况,我必须计算天数满足以下两个条件。

  1. 如果给出完成日期则天数=完成日期-提交日期
  2. 如果完成日期为 NaT(或空白)(如果事件仍在处理中,则 天数=L1+L2

此外,如何将天数转换为小时数,例如。 “2 天 08:00:00”到“56 小时”?

示例数据:

    Incident    Status      Priority    Team    Submit Date          Completed Date     L1  L2  No_of_days Age_in_Hours
    INC0011     Pending     Medium      L2      2020-06-04 00:00:00                     1   1             
    INC0012     completed   High        L2      2020-06-04 00:00:00 2020-06-08 02:00:00 2   2      
    INC0013     In progress Low L1              2020-06-05 00:00:00                     1   2      
    INC0014     Assigned    Medium      L1      2020-06-05 00:00:00                     1   3      
    INC0015     completed   High        L2      2020-06-05 00:00:00 2020-06-05 01:00:00 0   1       

示例代码:

data = pd.read_excel('C:\Age.xlsx')
x=(data['Completed Date']- data['Submit Date'])

答案如下:

a) 如果给出完成日期则天数=完成日期-提交日期

df['No_of_days'] = df['Completed Date'] - df['Submit Date']

b) 此外,如何将天数转换为小时数,例如。 “2 天 08:00:00”到“56 小时”?

df['hours'] = df['No_of_days'] / pd.Timedelta('1 hour')

c) 如果完成日期为 NaT(或空白)(如果事件仍未完成,则天数 = L1+L2(小时比日期更容易。

我找到的最简单的方法是使用 np.where,它基本上是数组的 if 语句。你可以查看更好的解释 here.

import numpy as np
df['hours'] = np.where(df['hours'].isnull(), df['L1'] + df['L2'], df['hours']) 

您可以根据是否填写完成日期列创建一个布尔掩码,并使用loc有条件地填写天数列:

  • 如果有完成日期,则用完成日期减去开始日期
  • 不是,取 L1L2 的总和,然后 pandas.Timedelta 这么多天

这将使 "No_of_days" 列全部为 Timedelta,然后您可以轻松地将其按除法转换为小时数:

#mask is where "Completed Date" is null
mask = df['Completed Date'].isnull()

df.loc[~mask, 'No_of_days'] = df['Completed Date'][~mask] - df['Submit Date'][~mask]
df.loc[mask, 'No_of_days'] = pd.to_timedelta(df['L1'][mask] + df['L2'][mask], unit='days')

df['Age_in_Hours'] = df['No_of_days']/pd.Timedelta(hours=1)

请注意,有完整日期的时间和没有完整日期的时间在精度上存在差异(因为 L1L2 不提供小时数)。