如何比较 pandas 中的两列值

How to compare two columns value in pandas

我有一个数据框,其中两个 columns.for 例如

S.no. Column1 Column2
    1  00001x  00002x
    2  00003j  00005k
    3  00002x  00001x
    4  00004d  00008e

值可以是字符串格式的任何内容 我想以保留 s.no 1 或 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]

注意。使用 set 或 sorted 需要转换为元组 (lambda x: tuple(sorted(x))),因为 duplicated 函数对值进行哈希处理,这对于可变对象

是不可能的

输出:

   S.no. Column1 Column2
0      1  00001x  00002x
1      2  00003j  00005k
3      4  00004d  00008e