Python定义重复规则
我有下表:Python定义重复规则,python,Python,我有下表: index col_A col_B 0 John Jones 1 Perez Mark 2 Jones John 3 Mark Perez 4 Albert Perez 第0行和第2行以及第1行和第3行的列值都已切换。我正在寻找一种方法来识别第0行和第2行是重复的,第1行和第3行也是重复的。然后我想删除重复项,只保留一个唯一的引用。因此,生成的矩阵应该是3乘2(因为第4行没有重复项)。有没有一种不使用嵌套循环(我的表有300多万行)的有效方法?谢
index col_A col_B
0 John Jones
1 Perez Mark
2 Jones John
3 Mark Perez
4 Albert Perez
第0行和第2行以及第1行和第3行的列值都已切换。我正在寻找一种方法来识别第0行和第2行是重复的,第1行和第3行也是重复的。然后我想删除重复项,只保留一个唯一的引用。因此,生成的矩阵应该是3乘2(因为第4行没有重复项)。有没有一种不使用嵌套循环(我的表有300多万行)的有效方法?谢谢您可以使用
集合
来记住已经添加的元素。差不多
a = [(0, 'John', 'Jones'), (1, 'Perez', 'Mark'), (2, 'Jones', 'John'), (3, 'Mark', 'Perez'), (4, 'Albert', 'Perez')]
res = []
already_added = set()
for e in a:
key1, key2 = e[1]+e[2], e[2]+e[1]
if key1 not in already_added and key2 not in already_added:
res.append(e)
already_added.add(key1)
res
Out[37]: [(0, 'John', 'Jones'), (1, 'Perez', 'Mark'), (4, 'Albert', 'Perez')]
一个简单且最有效的方法是创建一个DBMS。 在sqlite3中,类似这样的东西可以工作:
DELETE FROM table WHERE id NOT IN (SELECT max(id) FROM table GROUP BY col_A,col_B)
你使用的是什么数据库引擎?@youngminz:这是一个csv文件这将是一个高效的算法1:将所有数据读入内存2:对列a和列B进行排序3)对数据进行排序==>O(N log_2 N)4)查找重复项==>O(N)要查找重复项,对数据进行排序后将非常高效。嵌套for语句可能是O(N^2),而排序和查找重复项只是O(N log_2n)+O(N)不要使用
ready_added |=set([key1])
,只要使用ready_added.add(key1)
@juanpa.arrivillaga谢谢您的评论,我会更正我的错误answer@kvorobiev还有胡安帕。阿里维拉加:谢谢!它工作得很好。这花了超过15分钟,但考虑到桌子的大小,我认为这是最快的选择。再次感谢