我有以下pandas dataframe:
id | start | end |
---|---------------------|--------------------|
TA | 2022-05-20 06:30:36 | 2022-05-20 09:58:52|
TA | 2022-05-20 08:47:13 | 2022-05-20 08:57:47|
TA | 2022-05-20 08:44:11 | 2022-05-20 10:15:14|
TA | 2022-06-10 07:45:11 | 2022-06-10 10:15:14|
TA | 2022-06-10 07:55:11 | 2022-06-10 11:15:14|
BA | 2022-05-24 08:48:12 | 2022-05-24 10:57:27|
BA | 2022-05-24 10:48:29 | 2022-05-24 12:08:54|
RG | 2022-05-31 07:57:26 | 2022-05-31 08:09:46|
RG | 2022-05-31 08:06:50 | 2022-05-31 08:08:49|
RG | 2022-05-31 08:07:51 | 2022-05-31 08:18:37|
对于每个id,我想比较开始时间戳是否包含在开始和结束时间戳之间,如果包含,那么我从开始列中取最低的时间戳值,从结束列中取最高的时间戳值。生成的dataframe将如下所示:
id | start | end |
---|---------------------|--------------------|
TA | 2022-05-20 06:30:36 | 2022-05-20 10:15:14|
TA | 2022-06-10 07:45:11 | 2022-06-10 11:15:14|
BA | 2022-05-24 08:48:12 | 2022-05-24 12:08:54|
RG | 2022-05-31 07:57:26 | 2022-05-31 08:18:37|
可能存在其中时间戳可能未被包含/重叠在组中的行,并且那些行将保持原样,但是如上面的示例中重叠的那些行将被减少和分组。有没有人能在python中提出一个最佳的方法来实现这一点?
更新
数据按 id 和 start 排序。
2条答案
按热度按时间wfveoks01#
好吧,找到了一个方法,想在这里分享给其他有类似问题的人:
sh7euo9m2#
如果数据按
"id"
和"start"
排序,我们可以创建额外的累积最大结束列,然后在出现新的组id或开始数据大于前一个累积最大结束的情况下拆分数据,并在每个获得的部分中获得第一个开始日期和最后一个累积最大结束日期作为聚合值:对测试数据
我们得到输出