【发布时间】:2020-03-19 21:30:20
【问题描述】:
我有两个表,每刻钟都有数据。每一刻钟可以有多个观察值。我想要做的是将这些表连接在一起,并让所有观察结果匹配的行和观察结果不匹配的行在匹配时不显示不匹配。
例如:
表 A:
+-----+----------------+---------------+
| key | qhr | observation_A |
+-----+----------------+---------------+
| 1 | 1/1/2020 10:00 | A |
| 1 | 1/1/2020 10:00 | B |
| 1 | 1/1/2020 10:15 | A |
| 1 | 1/1/2020 10:15 | B |
| 1 | 1/1/2020 10:30 | B |
| 1 | 1/1/2020 10:45 | A |
| 1 | 1/1/2020 11:00 | B |
| 1 | 1/1/2020 11:00 | C |
| 1 | 1/1/2020 11:15 | C |
| 2 | 1/1/2020 10:00 | C |
| 2 | 1/1/2020 10:00 | B |
| 2 | 1/1/2020 10:15 | A |
| 2 | 1/1/2020 10:15 | C |
| 2 | 1/1/2020 10:30 | A |
| 2 | 1/1/2020 10:45 | C |
| 2 | 1/1/2020 11:00 | A |
| 2 | 1/1/2020 11:00 | C |
| 2 | 1/1/2020 11:15 | B |
+-----+----------------+---------------+
表 B:
+-----+----------------+---------------+
| key | qhr | observation_B |
+-----+----------------+---------------+
| 1 | 1/1/2020 10:00 | A |
| 1 | 1/1/2020 10:00 | B |
| 1 | 1/1/2020 10:15 | A |
| 1 | 1/1/2020 10:15 | C |
| 1 | 1/1/2020 10:30 | B |
| 1 | 1/1/2020 10:45 | A |
| 1 | 1/1/2020 11:00 | A |
| 1 | 1/1/2020 11:00 | C |
| 1 | 1/1/2020 11:15 | C |
| 2 | 1/1/2020 10:00 | C |
| 2 | 1/1/2020 10:00 | B |
| 2 | 1/1/2020 10:15 | A |
| 2 | 1/1/2020 10:15 | C |
| 2 | 1/1/2020 10:30 | B |
| 2 | 1/1/2020 10:45 | C |
| 2 | 1/1/2020 11:00 | A |
| 2 | 1/1/2020 11:15 | A |
+-----+----------------+---------------+
预期输出:
+-----+----------------+---------------+---------------+-------+
| key | qhr | observation_A | observation_B | MATCH |
+-----+----------------+---------------+---------------+-------+
| 1 | 1/1/2020 10:00 | A | A | Y |
| 1 | 1/1/2020 10:00 | B | B | Y |
| 1 | 1/1/2020 10:15 | A | A | Y |
| 1 | 1/1/2020 10:15 | B | C | N |
| 1 | 1/1/2020 10:30 | B | B | Y |
| 1 | 1/1/2020 10:45 | A | A | Y |
| 1 | 1/1/2020 11:00 | B | A | N |
| 1 | 1/1/2020 11:00 | C | C | Y |
| 1 | 1/1/2020 11:15 | C | C | Y |
| 2 | 1/1/2020 10:00 | C | C | Y |
| 2 | 1/1/2020 10:00 | B | B | Y |
| 2 | 1/1/2020 10:15 | A | A | Y |
| 2 | 1/1/2020 10:15 | C | C | Y |
| 2 | 1/1/2020 10:30 | A | B | N |
| 2 | 1/1/2020 10:45 | C | C | Y |
| 2 | 1/1/2020 11:00 | A | A | Y |
| 2 | 1/1/2020 11:00 | C | | N |
| 2 | 1/1/2020 11:15 | B | A | N |
+-----+----------------+---------------+---------------+-------+
我尝试使用完全外连接(在键和 qhr 上连接)来包含观察结果不匹配的时间,但是当我这样做时,即使存在如下匹配,我也会获得每个组合潜力:
+-----+----------------+---------------+---------------+-------+
| key | qhr | observation_A | observation_B | MATCH |
+-----+----------------+---------------+---------------+-------+
| 1 | 1/1/2020 10:00 | A | B | N |
| 1 | 1/1/2020 10:00 | A | A | Y |
| 1 | 1/1/2020 10:00 | B | B | Y |
| 1 | 1/1/2020 10:00 | B | A | N |
+-----+----------------+---------------+---------------+-------+
我正在尝试找出一种方法来包含任何合法的不匹配但排除第 1 行和第 4 行,因为 A 和 B 实际匹配。
我在 spark 中工作,所以我可以使用 spark SQL 或 pyspark 数据帧来解决这个问题,甚至可能是 pandas。任何建议将不胜感激。
【问题讨论】:
-
我们在哪些列上绑定两个 dfs?
-
假设您有相同数量的观察,您可以为两个数据集创建一个
monotonicallyincreasingid并加入它们。 -
谢谢,但不,我们不能假设相同的观察结果。
标签: pandas pyspark pyspark-sql