Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫会根据2列删除重复项,有时会反转_Python_Pandas - Fatal编程技术网

Python 熊猫会根据2列删除重复项,有时会反转

Python 熊猫会根据2列删除重复项,有时会反转,python,pandas,Python,Pandas,我有一个DF看起来像 c1 c2 c3 1 A B x 2 A C y 3 B A x 4 B D z 5 A B y 如您所见,如果忽略c1和c2是不同的列(或者如果它们变为相反的列),那么第1行和第3行将重复。但是,第5行不是。如何基于列c1和c2删除行,而不管重复值在哪里 提前感谢您可以按子集选择列,按排序,从数组创建新的数据帧,并通过以下方式与按逆条件过滤一起使用:

我有一个DF看起来像

    c1    c2    c3
1   A     B     x
2   A     C     y
3   B     A     x
4   B     D     z
5   A     B     y
如您所见,如果忽略
c1
c2
是不同的列(或者如果它们变为相反的列),那么第1行和第3行将重复。但是,第5行不是。如何基于列
c1
c2
删除行,而不管重复值在哪里


提前感谢

您可以按子集选择列,按排序,从数组创建新的数据帧,并通过以下方式与按逆条件过滤一起使用:

或:


好的,让我们尝试一些新的frozenset,将您的列排序为已排序的
元组
,然后使用
复制的

df[~df[['c1','c2']].apply(frozenset,axis=1).duplicated()]
Out[666]: 
  c1 c2 c3
1  A  B  x
2  A  C  y
4  B  D  z

也可以使用sorted()对行值进行排序:


我是你最大的粉丝!每次我发布一个熊猫问题,我真的认为你会是第一个回答的人:)非常感谢@Sosi-hmm,这要看情况了,很多真正优秀的熊猫大师:)爱这一只!以前从未见过frozenset。@Erfan只是一个小技巧,与np相比,sort apply+frozenset要慢得多
df = df[~pd.DataFrame(np.sort(df[['c1','c2']], axis=1)).duplicated().values]
df[~df[['c1','c2']].apply(frozenset,axis=1).duplicated()]
Out[666]: 
  c1 c2 c3
1  A  B  x
2  A  C  y
4  B  D  z
df[~df[['c1','c2']].apply(lambda row: sorted(row), axis = 1).duplicated()]