【发布时间】:2020-08-13 22:34:41
【问题描述】:
目前,对于我要解决的问题,我非常困惑。我有一个包含 4 列的数据框。我想尝试按天和 id 查找重叠时间。例如,我的 df 如下所示:
+------+--------------+-----------------------+----------------------+
| id | date | time_start | end_time |
+--------------------------------------------------------------------+
| 123 | 2019-11-10 | 2019-11-10 08:00:00 | 2019-11-10 08:30:00 |
| | | | |
| 123 | 2019-11-10 | 2019-11-10 08:15:00 | 2019-11-10 08:30:00 |
| | | | |
| 123 | 2019-11-10 | 2019-11-10 08:25:00 | 2019-11-10 08:45:00 |
| | | | |
| 123 | 2019-11-11 | 2019-11-11 08:00:00 | 2019-11-11 08:30:00 |
| | | | |
| 123 | 2019-11-11 | 2019-11-11 08:30:00 | 2019-11-11 09:00:00 |
+------+--------------+-----------------------+----------------------+
import pandas as pd
data = {'id':['123', '123', '123', '123','123'], 'date':['2019-11-10', '2019-11-10', '2019-11-10', '2019-11-11', '2019-11-11'],
'time_start':['2019-11-10 08:00:00', '2019-11-10 08:15:00', '2019-11-10 08:25:00', '2019-11-11 08:00:00', '2019-11-11 08:30:00'],
'end_time':['2019-11-10 08:30:00','2019-11-10 08:30:00','2019-11-10 08:45:00','2019-11-11 08:30:00','2019-11-11 09:00:00']}
df = pd.DataFrame(data)
,id,date,time_start,end_time
0,123,2019-11-10,2019-11-10 08:00:00,2019-11-10 08:30:00
1,123,2019-11-10,2019-11-10 08:15:00,2019-11-10 08:30:00
2,123,2019-11-10,2019-11-10 08:25:00,2019-11-10 08:45:00
3,123,2019-11-11,2019-11-11 08:00:00,2019-11-11 08:30:00
4,123,2019-11-11,2019-11-11 08:30:00,2019-11-11 09:00:00
我希望看到类似于以下的结果:
+----+------------+----------------------+---------------------+---------------+-------------------------+-----------------+
|id | date | time_start | time_end | overlap_count | total_minutes_recorded | actual_minutes|
+--------------------------------------------------------------------------------------------------------------------------+
|123 | 2019-11-10 | 2019-11-10 08:00:00 | 2019-11-10 08:45:00 | 3 | 65 | 45 |
| | | | | | | |
|123 | 2019-11-11 | 2019-11-11 08:00:00 | 2019-11-11 09:00:00 | 0 | 60 | 60 |
+----+------------+----------------------+---------------------+---------------+-------------------------+-----------------+
我查看了其他答案,这些答案开始让我了解如何解决这个问题,例如:
Pandas: Count time interval intersections over a group by
这些答案中的大多数只是给我一个重叠时间的计数,并且需要很长时间来计算。有没有什么技巧可以开始解决这个问题
【问题讨论】:
-
您想获取相同开始时间但相差 1 天的值吗?
-
请不要在降价表中发布数据,它们不容易重现。请查看How to provide a reproducible copy of your DataFrame using
df.head(10).to_clipboard(),然后edit您的问题,然后将剪贴板粘贴到代码块中。 -
您在预期输出中显示了错误的数据:
time_end如果与主 df 中的不同 -
@TrentonMcKinney 谢谢。我会这样做的
-
谢谢@sygneto 我现在已经更正了这些日期