我有下表:
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万行)的有效方法?感谢
答案 0 :(得分:1)
您可以使用set
来记住已添加的元素。像
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')]
答案 1 :(得分:0)
一种简单而有效的方法是创建一个DBMS。 在sqlite3中,这样的东西可以工作:
DELETE FROM table WHERE id NOT IN (SELECT max(id) FROM table GROUP BY col_A,col_B)