如何在python中将天数转换为小时

如何在python中将天数转换为小时,python,excel,pandas,datetime,datetime-conversion,Python,Excel,Pandas,Datetime,Datetime Conversion,我有一个Age.xlsx,其中我在计算事件的天数(粒度级别,我必须以小时为单位计算年龄)我遇到了一种情况,我必须计算以下两种情况下的天数 如果给出了完成日期,则天数=完成日期提交日期 如果完成日期为NaT(或空白)(如果事件仍未解决,则天数=L1+L2 此外,如何将天转换为小时,例如“2天08:00:00”转换为“56小时” 样本数据: Incident Status Priority Team Submit Date Completed D

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

  • 如果给出了完成日期,则天数=完成日期提交日期
  • 如果完成日期为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       
    
    Sampel代码:

    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小时”

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

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

    答案如下:

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

    df['No_of_days'] = df['Completed Date'] - df['Submit Date']
    
    b) 此外,如何将天转换为小时,例如“2天08:00:00”转换为“56小时”

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

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


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

    • 如果有完成日期,则取完成日期减去开始日期
    • 它不是,取
      L1
      L2
      之和,并为这么多天做一个
      pandas.Timedelta
    这将使
    “无天数”
    列全部为
    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)
    

    请注意,有完成日期的时间与没有完成日期的时间在精度上存在差异(因为
    L1
    L2
    不提供小时)。

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

    • 如果有完成日期,则取完成日期减去开始日期
    • 它不是,取
      L1
      L2
      之和,并为这么多天做一个
      pandas.Timedelta
    这将使
    “无天数”
    列全部为
    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)
    

    请注意,有完成日期的时间与没有完成日期的时间在精度上存在差异(因为
    L1
    L2
    不提供小时)。

    如果是时间增量,您可以始终使用td.total_seconds()/3600获得小时如果是时间增量,您可以始终使用td.total_seconds()/3600获得小时