Python 熊猫会根据2列删除重复项,有时会反转
我有一个DF看起来像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删除行,而不管重复值在哪里 提前感谢您可以按子集选择列,按排序,从数组创建新的数据帧,并通过以下方式与按逆条件过滤一起使用:
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()]