我有一个看起来像DF的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
删除行?
预先感谢
答案 0 :(得分:3)
好吧,让我们尝试一些新的Frozenset方法,将您的列排序为tuple
,然后使用duplicated
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
答案 1 :(得分:2)
您可以按子集选择列,按numpy.sort
排序,从数组中创建新的DataFrame,并使用DataFrame.duplicated
并按boolean indexing
进行逆条件过滤:
df = df[~pd.DataFrame(np.sort(df[['c1','c2']], axis=1), index=df.index).duplicated()]
print (df)
c1 c2 c3
1 A B x
2 A C y
4 B D z
或者:
df = df[~pd.DataFrame(np.sort(df[['c1','c2']], axis=1)).duplicated().values]
答案 2 :(得分:0)
也可以通过使用sorted()对行值进行排序来完成:
df[~df[['c1','c2']].apply(lambda row: sorted(row), axis = 1).duplicated()]