【发布时间】:2021-06-26 20:31:31
【问题描述】:
希望使用一个数据帧中落入另一个数据帧时间窗口的时间来匹配两个数据帧。
生产数据框
| Production Time | Product | Value | Worker_ID |
|---|---|---|---|
| 2020-01-24 08:13:59 | Prod4 | 5.9 | 402 |
| 2020-01-24 08:15:38 | Prod5 | 5.7 | 402 |
| 2020-01-24 08:17:17 | Prod4 | 5.1 | 402 |
| 2020-01-25 22:13:59 | Prod4 | 5.9 | 402 |
| 2020-01-25 21:15:38 | Prod7 | 5.7 | 402 |
| 2020-01-26 02:17:17 | Prod2 | 5.1 | 402 |
| 2020-01-24 09:17:17 | Prod4 | 5.1 | 403 |
| 2020-01-25 21:13:59 | Prod5 | 5.9 | 403 |
位置数据框
| Location | window_start | window_stop | Worker_ID |
|---|---|---|---|
| Loc16 | 2020-01-24 05:00:00 | 2020-01-24 21:00:00 | 402 |
| Loc27 | 2020-01-25 21:00:00 | 2020-01-26 05:00:00 | 402 |
| Loc61 | 2020-01-24 05:00:00 | 2020-01-24 21:00:00 | 403 |
| Loc27 | 2020-01-25 21:00:00 | 2020-01-26 05:00:00 | 403 |
结果如下所示:
| Location | window_start | window_stop | Worker_ID | Production Time | Product | Quality |
|---|---|---|---|---|---|---|
| Loc16 | 2020-01-24 05:00:00 | 2020-01-24 21:00:00 | 402 | 2020-01-24 08:13:59 | Prod4 | 5.9 |
| Loc16 | 2020-01-24 05:00:00 | 2020-01-24 21:00:00 | 402 | 2020-01-24 08:15:38 | Prod5 | 5.7 |
| Loc16 | 2020-01-24 05:00:00 | 2020-01-24 21:00:00 | 402 | 2020-01-24 08:17:17 | Prod4 | 5.1 |
| Loc27 | 2020-01-25 21:00:00 | 2020-01-26 05:00:00 | 402 | 2020-01-25 22:13:59 | Prod4 | 5.9 |
| Loc27 | 2020-01-25 21:00:00 | 2020-01-26 05:00:00 | 402 | 2020-01-25 21:15:38 | Prod7 | 5.7 |
| Loc27 | 2020-01-25 21:00:00 | 2020-01-26 05:00:00 | 402 | 2020-01-26 02:17:17 | Prod2 | 5.1 |
| Loc61 | 2020-01-24 05:00:00 | 2020-01-24 21:00:00 | 403 | 2020-01-24 09:17:17 | Prod4 | 5.1 |
| Loc27 | 2020-01-25 21:00:00 | 2020-01-26 05:00:00 | 403 | 2020-01-25 21:13:59 | Prod5 | 5.9 |
首先在 Worker_ID 上进行匹配,然后是生产日期时间落在该位置的日期时间窗口中的位置。
此代码有效:
possible_matches = location_df.merge(production_df,on='Worker_ID',how='left')
build_df = possible_matches[(possible_matches['Production Time'] >= possible_matches['window_start']) &
(possible_matches['Production Time'] <= possible_matches['window_stop'])]
但是当生产数据框中有数百万行而位置数据框中有数千行时不起作用。
寻找一种更有效的方法来执行此连接,该方法实际上适用于具有更多工作人员和位置的大型数据集。
【问题讨论】:
-
“当生产数据框中有数百万行而位置数据框中有数千行时不起作用”是什么意思?你是想说这需要太长时间吗?
-
肯定会导致内核崩溃
-
你能发布堆栈跟踪或错误日志吗?
-
这个post有一个很好的解决方案。
标签: pandas