【问题标题】:Convert negative duration in seconds to negative %H:%M:%S.%f将负持续时间(以秒为单位)转换为负 %H:%M:%S.%f
【发布时间】:2020-02-14 11:12:31
【问题描述】:

我正在制作一个函数来使用 Pandas 计算两个持续时间之间的时间差。

函数是:

def time_calc(dur1, dur2):
    date1 = pd.to_datetime(pd.Series(dur2))
    date2 = pd.to_datetime(pd.Series(dur1))

    df = pd.DataFrame(dict(ID = ids, DUR1 = date2, DUR2 = date1))
    df1 = pd.DataFrame(dict(ID = ids, Duration1 = date2, Duration2 = date1))
    df1['Duration1'] = df['DUR1'].dt.strftime('%H:%M:%S.%f')
    df1['Duration2'] = df['DUR2'].dt.strftime('%H:%M:%S.%f')
    cols = df.columns.tolist()
    cols = ['ID', 'DUR1', 'DUR2']
    df = df[cols]
    df['diff_seconds'] = df['DUR2'] - df['DUR1']
    df['diff_seconds'] = df['diff_seconds']/np.timedelta64(1,'s')
    df['TimeDelta'] = df['diff_seconds'].apply(lambda d: str(datetime.timedelta(seconds=abs(d))))
    df3 = df1.merge(df, on='ID')
    cols = df3.columns.tolist()
    cols = ['ID', 'Duration1', 'Duration2', 'TimeDelta', 'diff_seconds']
    df3 = df3[cols]
    print(df3)

数学是:Duration2-Duration1=TimeDelta

这个函数做得很好:

Duration1        Duration2         TimeDelta           diff_seconds
00:00:23.999891  00:00:25.102076   0:00:01.102185      1.102185
00:00:43.079173  00:00:44.621481   0:00:01.542308      1.542308

但是当 Duration2

Duration1        Duration2         TimeDelta           diff_seconds
00:05:03.744332  00:04:58.008081   0:00:05.736251     -5.736251

所以我需要我的函数将 TimeDelta 转换为负值,如下所示:

Duration1        Duration2         TimeDelta           diff_seconds
00:05:03.744332  00:04:58.008081   -0:00:05.736251     -5.736251

我想我需要以另一种方式转换“TimeDelta”,但我所有的尝试都是无用的。

如果有人能帮我解决这个问题,我将非常感激。

提前致谢!

【问题讨论】:

标签: python pandas timestamp timedelta


【解决方案1】:

我已经解决了这个问题。

一一制作时间戳选取逻辑并将时间戳传递给'time_convert'函数

df['diff_seconds'] = df['DUR2'] - df['DUR1']
df['diff_seconds'] = df['diff_seconds']/np.timedelta64(1,'s')

for i in df['diff_seconds']:
    df['TimeDelta'] = time_convert(i)

如果秒数为负数,time_convert 函数只是将“-”附加到格式化时间戳:

def time_convert(d):
    if d > 0:
        lst.append(str(datetime.timedelta(seconds=d)))
    else:
        lst.append('-' + str(datetime.timedelta(seconds=abs(d))))

然后,我刚刚使用 lst 创建了新的数据框,并将它们合并在一起

df_t = pd.DataFrame(dict(ALERTS = alerts, TimeDelta = lst))
df_f = df_t.merge(df3, on='ID')

希望这会对某人有所帮助。

【讨论】:

猜你喜欢
  • 2018-10-07
  • 2016-08-29
  • 2012-11-29
  • 2021-12-12
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 1970-01-01
相关资源
最近更新 更多