我已经被这个问题困扰了一段时间了,我希望能得到一些帮助。这是我正在使用的一个熊猫数据帧的简化版本:
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
我已经找到了之前的问题,比如这个Calculate Pandas DataFrame Time Difference Between Two Columns in Hours and Minutes,但是大多数问题都是从同一行中减去日期。但是,在我的示例中,我必须找到日期最早的ID,并使用它来查找具有相同id的行的时间差。
发布于 2020-07-21 20:09:19
首先通过to_datetime
将列转换为datetimes,然后通过GroupBy.transform
减去每组的最小值,最后使用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
https://stackoverflow.com/questions/63014186
复制相似问题