【问题标题】:How to convert No of days to Hours in python [duplicate]如何在python中将天数转换为小时数[重复]
【发布时间】:2020-10-11 20:44:48
【问题描述】:

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

  1. 如果给出了完成日期,则 天数= 完成日期-提交日期
  2. 如果完成日期为 NaT(或空白)(如果事件仍未解决,则 No of days=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'])

【问题讨论】:

  • 如果是 TimeDelta,您可以随时使用 td.total_seconds() / 3600 来获取小时数

标签: python excel pandas datetime datetime-conversion


【解决方案1】:

您可以根据是否填写完成日期列创建布尔掩码,并使用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 不提供小时数)。

【讨论】:

    【解决方案2】:

    答案如下:

    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']) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-23
      • 2018-02-22
      • 1970-01-01
      • 2016-02-06
      • 2020-07-24
      • 1970-01-01
      • 2016-11-06
      • 2022-09-30
      相关资源
      最近更新 更多