Python 如何在pyhton中有效地创建一组集合?

Python 如何在pyhton中有效地创建一组集合?,python,pandas,row,unique,Python,Pandas,Row,Unique,我有两个数据帧,两个数据帧,两列。行是值对,其中顺序并不重要:a-b==b-a对我来说。我需要比较两个数据帧之间的这些值对。 我有一个解决方案,但是对于一个300k的数据帧来说,速度非常慢 import pandas as pd df1 = pd.DataFrame({"col1" : [1,2,3,4], "col2":[2,1,5,6]}) df2 = pd.DataFrame({"col1" : [2,1,3,4], "

我有两个数据帧,两个数据帧,两列。行是值对,其中顺序并不重要:a-b==b-a对我来说。我需要比较两个数据帧之间的这些值对。 我有一个解决方案,但是对于一个300k的数据帧来说,速度非常慢

import pandas as pd

df1 = pd.DataFrame({"col1" : [1,2,3,4], "col2":[2,1,5,6]})
df2 = pd.DataFrame({"col1" : [2,1,3,4], "col2":[1,9,8,9]})

mysets = [{x[0],x[1]} for x in df1.values.tolist()]
df1sets = []
for element in mysets:
    if element not in df1sets:
        df1sets.append(element)
           
mysets = [{x[0],x[1]} for x in df2.values.tolist()]
df2sets = []
for element in mysets:
    if element not in df2sets:
        df2sets.append(element)

intersect_sets = [x for x in df1sets if x in df2sets]

这是可行的,但速度非常慢,必须有一种更简单的方法。我的一个问题是,我无法将集合添加到集合中,我无法创建{{1,2}、{2,3}等

解决方案是与列的排序值合并,删除重复项并转换为集合:

intersect_sets = ([set(x) for x in pd.DataFrame(np.sort(df1.to_numpy(), axis=1))
                        .merge(pd.DataFrame(np.sort(df2.to_numpy(), axis=1)))
                        .drop_duplicates()
                        .to_numpy()])
       
print (intersect_sets)
[{1, 2}]
另一个想法是使用一套冻结套:

intersect_sets = (set([frozenset(x) for x in df1.to_numpy()]) & 
                  set([frozenset(x) for x in df2.to_numpy()]))
print (intersect_sets)
{frozenset({1, 2})}

这些看起来也很复杂,我没有坚持拍摄,只是我想不出其他的东西,还是谢谢你的邀请answer@biohazard90-嗯,表演怎么样?第二个-在我看来,您的
11行解决方案
2行
解决方案更简单。