【发布时间】:2017-11-21 19:06:54
【问题描述】:
要解决的问题如下: 我有两个要合并为一个的数据集。数据集没有公共键列。我想根据第 1 列和第 2 列的唯一组合以及第 3 列的相似性排除重复项。通过相似性,我的意思是数据集 A 中第 3 列的值仅略大于/小于数据集 B 中的值,例如对于值 20,范围 [18,22] 中的值是可以接受的。一个例子会更清楚:
数据集 A:
Col1 | Col2 | Col3 |
1 A | A | 10 |
2 B | A | 20 |
3 A | B | 10 |
4 B | B | 20 |
数据集 B:
Col1 | Col2 | Col3 |
1 A | A | 10 |
2 B | A | 21 |
3 A | B | 100 |
- 两个数据集中的第 1 行完全相同,因此我只想在最终数据集中包含一行。
- 第 2 行中的第 1 列和第 2 列完全相同。但是,第 3 列中的值 略有 不同:20 与 21。我想将这些行视为重复行并仅包含一行,例如来自数据集 A
- 第 3 行中的第 1 列和第 2 列完全相同。但是,第 3 列中的值 非常 不同:10 与 100。我想将这两行都包含在我的最终数据集中。
- 数据集 A 中的第 4 行在数据集 B 中不存在,因此我想将其包含到我的最终数据集中。
预期输出:
Col1 | Col2 | Col3 |
1 A | A | 10 |
2 B | A | 20 |
3 A | B | 10 |
4 A | B | 100 |
5 B | B | 20 |
有没有计算复杂度低于O(n^2)的方法【用每一行检查每一行】?
【问题讨论】:
-
你有5%以内“稍微”的数学定义吗?或在+/-三个单位内?比“稍微”更具体和可编程的东西。谢谢。
-
补充到@ScottBoston 的问题,“轻微”的最可能定义可能不是传递性的。当第 k & m 行和 m & n 行略有不同,但第 k & n 行差异极大时,会发生什么情况?
标签: python database algorithm pandas merge