我有一个包含从A到B/C的航班时间和从B/C到Z的航班的df
。
简单的合并就可以解决问题。
routes = pd.merge(df , df , left_on = 'Destination' , right_on = 'Origin')
然而,我的日程表 df 有来自 A -> B/C/D/.../Y 的成千上万次航班以及来自 B/C/D/.../Y->Z 的成千上万次航班。将此表与自身合并会导致一个包含数十亿行的 routes
表。我可以通过筛选转机时间小于 24 小时的路线来过滤到一个小的 df。
routes = routes[routes['Time_y'] - routes['Time_x'] < 24]
首先计算所有可能的路线,然后过滤出停留时间小于24小时的路线是计算上不可行的。有没有一种同时执行pd.merge并满足停留时间小于24小时条件的方法呢?伪代码如下:
routes = pd.merge(df , df , left_on = 'Destination' , right_on = 'Origin' , right['Time'] - left['Time'] < 24)
这是示例数据:
df = pd.DataFrame({'Origin': {1: 'A', 6: 'A', 11: 'A', 16: 'A', 21: 'B', 26: 'B', 31: 'C', 36: 'C'}, 'Destination': {1: 'B', 6: 'B', 11: 'C', 16: 'C', 21: 'Z', 26: 'Z', 31: 'Z', 36: 'Z'}, 'Dept_Time': {1: pd.Timestamp('2019-03-30 17:31:00'), 6: pd.Timestamp('2019-05-16 17:32:00'), 11: pd.Timestamp('2019-04-01 08:30:00'), 16: pd.Timestamp('2019-06-09 08:20:00'), 21: pd.Timestamp('2019-07-26 08:31:00'), 26: pd.Timestamp('2019-03-31 06:16:00'), 31: pd.Timestamp('2019-07-03 23:52:00'), 36: pd.Timestamp('2019-03-27 17:31:00')}, 'Arrv_Time': {1: pd.Timestamp('2019-03-30 23:23:00'), 6: pd.Timestamp('2019-05-16 23:22:00'), 11: pd.Timestamp('2019-04-01 14:22:00'), 16: pd.Timestamp('2019-06-09 14:18:00'), 21: pd.Timestamp('2019-07-26 14:23:00'), 26: pd.Timestamp('2019-06-18 05:00:00'), 31: pd.Timestamp('2019-07-04 05:36:00'), 36: pd.Timestamp('2019-03-27 23:23:00')}})
HH:MM:SS
吗?请直接在问题中发布示例数据。 - Parfait