如何比较 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
我有一个数据框,其中两个 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