【发布时间】:2021-11-21 14:27:10
【问题描述】:
我有一个包含两列 'left_index' 和 'right_index' 的超过一千万行的数据框。
'left_index' 是值的索引,'right_index' 包含可能匹配的行的索引。
问题是这包含重复的匹配项(例如:0,1 和 1,0)。
我想过滤这个数据框,只保留每个匹配的一个组合。
我在这里使用列表作为示例。
在:[(0,1), (1,0), (3,567)]
输出:[(0,1), (3, 567)]
下面的代码产生了我想要的,但是它很慢。有没有更快的方法来解决这个问题?
lst2 = []
for i in lst1:
if(i in lst2):
lst1.remove(i)
else:
lst2.append((i[1],i[0]))
【问题讨论】:
-
那个代码不能产生你想要的……它给了我
[(1, 0)]。问题似乎是lst1.remove(i),它搞砸了迭代,for i in lst1。 -
lst2 = set(tuple(sorted(x)) for x in lst1)? -
您的限制是什么?例如,@Robin 提出了一个很好的解决方案,但它只有在订单(内部和外部)不重要时才有效。
-
您好,欢迎您。如果您可以查看how-to-ask,然后尝试生成mcve,那就太好了。
-
@rpanai 提示:您可以使用shorthands in comments!
[ask]变成 How to Ask 和[mre]变成 minimal reproducible example。
标签: python pandas loops iteration