繁体   English   中英

Python - 使用 Pandas 计算每个唯一标识符的日期之间的时间

[英]Python - Using Pandas to calculate time between dates for each unique identifier

我已经坚持了一段时间,我会很感激一些帮助。 这是我正在使用的 pandas dataframe 的简化版本:

ID  Date
1   16/07/2020 14:11:12
1   17/07/2020 15:12:11
1   16/07/2020 15:32:44
1   16/07/2020 17:11:24
2   19/07/2020 06:11:12
2   19/07/2020 12:12:11
2   20/07/2020 14:32:44
2   20/07/2020 02:11:24

我想通过使用每个 ID 的最小值并减去具有相同 ID 的行来计算时间。 但是,我希望格式为 hh:mm:ss,例如,如果差异超过 24 小时,则为 37:44:22。

这是我的结果应该是什么样子。

ID  Date                    time
1   16/07/2020 14:11:12     00:00:00
1   17/07/2020 18:32:23     28:21:11
1   16/07/2020 18:32:44     04:21:32
1   16/07/2020 17:11:24     00:00:12
2   19/07/2020 06:11:12     00:00:00
2   19/07/2020 12:12:12     06:01:00
2   20/07/2020 14:32:44     26:20:32

我发现了以前的问题,例如计算 Pandas DataFrame 两列之间的时间差(以小时和分钟为单位),但大多数问题从同一行中减去日期。 但是,在我的情况下,我必须找到具有最早日期的 id,并使用它来查找带有相同 ID 的行的时差。

首先通过 to_datetime 将列转换为日期时间,然后通过to_datetime减去每组的GroupBy.transform ,最后使用自定义 function 自定义timedeltas格式:

df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)

def f(x):
    ts = x.total_seconds()
    hours, remainder = divmod(ts, 3600)
    minutes, seconds = divmod(remainder, 60)
    return ('{:02d}:{:02d}:{:02d}').format(int(hours), int(minutes), int(seconds)) 

df['time1'] = df['Date'].sub(df.groupby('ID')['Date'].transform('min')).apply(f)
print (df)
   ID                Date      time     time1
0   1 2020-07-16 14:11:12  00:00:00  00:00:00
1   1 2020-07-17 18:32:23  28:21:11  28:21:11
2   1 2020-07-16 18:32:44  04:21:32  04:21:32
3   1 2020-07-16 17:11:24  00:00:12  03:00:12
4   2 2020-07-19 06:11:12  00:00:00  00:00:00
5   2 2020-07-19 12:12:12  06:01:00  06:01:00
6   2 2020-07-20 14:32:44  26:20:32  32:21:32

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM