【问题标题】:Python: Find all symetrics pairs in DataframePython:在 Dataframe 中查找所有对称对
【发布时间】:2017-12-08 19:12:43
【问题描述】:

我有一个包含列的数据框,我们称它们为 A 和 B,我想查找所有对称数据对,例如:

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

我想像这里一样返回所有我会得到的对(我实际上不需要两个都只需要 (2,1) 或 (2,1) 就足够了)

(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+ 行吗?

标签: python


【解决方案1】:

一般来说,您几乎不需要遍历 pandas 数据框中的行。在这种情况下,您可以加快速度

listTuples = zip(df.A,df.B)

如果这是您的代码运行缓慢的部分,那应该可以解决您的问题。

您的列表理解步骤对我来说看起来很有效...您的问题可能是您不断检查的列表中有许多重复的条目。首先只挑选唯一的,然后运行您的列表理解。

另请参阅 this stack overflow question 关于从 python 中的元组列表中选择唯一元组的信息。

【讨论】:

    猜你喜欢
    • 2016-04-20
    • 2012-08-07
    • 1970-01-01
    • 2016-12-17
    • 2019-10-18
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多