gpt4 book ai didi

Python:根据两个特征的唯一组合和第三个特征的条件删除重复项

转载 作者:太空狗 更新时间:2023-10-30 01:58:10 24 4
gpt4 key购买 nike

要解决的问题如下:我有两个要合并为一个的数据集。数据集没有公共(public)键列。我想根据第 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 行在两个数据集中完全相同,因此我只想在最终数据集中包含一行。
  • 第 1 列和第 2 列在第 2 行中完全相同。但是,第 3 列中的值略有不同:20 与 21。我想将这些行视为重复行并仅包含一行,例如来自数据集 A
  • 第 1 列和第 2 列在第 3 行中完全相同。但是,第 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) 的方法[用每一行检查每一行]?

最佳答案

一个解决方案可能是创建数据集 A 的 (Col1, Col2) -> Col3 的映射。然后 B 中的每一行都可以查看映射以查看哪个 Col3 值存在于数据集 A 中,具有相同的 Col1Col2 值。

伪代码,因为我不熟悉 pandas 库:

from collections import defaultdict

def is_close(a, b):
return abs(a-b) < some_value

d = defaultdict(list)
for col1, col2, col3 in A:
d[(col1, col2)].append(col3)

for col1, col2, col3 in B:
if not any(is_close(col3, x) for x in d[(col1, col2)]):
add_to_result(col1, col2, col3)

defaultdict 是必需的,因为 A 中有行的 col1col2 具有相同的值。这应该更快,因为创建映射是 O(n) 并且遍历 B 中的每个元素应该只检查 A 中具有相同 col1col2 的元素 值。

关于Python:根据两个特征的唯一组合和第三个特征的条件删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44632707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com