Python:在数据框中查找所有对称对

3

我有一个数据框,其中有两列,我们称其为A和B,我想找到所有对称的配对,例如:

pd.DataFrame({'A':[1, 2 , 3], 'B':[2, 1, 3]})

我希望能够返回所有这样的配对,就像这样:我将得到(实际上我只需要其中一个,只要有(2,1)或(1,2)即可)。
(1,2) and (2,1)

我首先尝试了一种算法,虽然能够工作但在我的数据框长度为26325时速度非常慢,在10分钟后仍未完成。

listTuples = list()
for index, row in test.iterrows():
    listTuples.append((row["A"], row["B"])) # convert to a list of tuple

answer = [(x, y) for (x, y) in listTuples if (y, x) in listTuples]

这些对必须相邻吗?(第i行和第i+1行)或者它们可以相隔2行或更多行出现? - Brad Solomon
1个回答

0
通常情况下,您几乎不需要在pandas数据帧中迭代行。在这种情况下,您可以通过以下方式加快速度:
listTuples = zip(df.A,df.B)

如果这部分代码运行缓慢,那么这将解决您的问题。

你的列表推导式步骤看起来很高效... 你的问题可能是因为在你不断检查的列表中有许多重复的条目。首先挑选出唯一的条目,然后再运行列表推导式。

此外,也可以参考这个关于如何从Python的元组列表中挑选唯一元组的Stack Overflow问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接