[英]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.