我有一个数据框架,其中两个列中有一些唯一的id。例如
S.no. Column1 Column2
1 00001x 00002x
2 00003j 00005k
3 00002x 00001x
4 00004d 00008e
Value可以是字符串格式的任意值我想比较这两列,让s。no。1和s。no。3的数据保留下来。因为这些id包含相同的信息。只是顺序不同。
基本上,如果列1中的一行值为X,列2为Y,列1中的另一行值为Y,列2中的另一行值为X,则只应保留一行。
在python中可能吗?
您可以将列转换为每行的frozenset
。
这将给出应用duplicated
的共同命令。
最后,使用前面的输出作为掩码对行进行切片:
mask = df.filter(like='Column').apply(frozenset, axis=1).duplicated()
df[~mask]
以前的答案使用set
:
mask = df.filter(like='Column').apply(lambda x: tuple(set(x)), axis=1).duplicated()
df[~mask]
NB。使用set或sorted需要转换为元组(lambda x: tuple(sorted(x))
),因为duplicated
函数对值进行散列,这对于可变对象
是不可能的。输出:
S.no. Column1 Column2
0 1 00001x 00002x
1 2 00003j 00005k
3 4 00004d 00008e