熊猫根据2列有时会倒置重复项

时间:2019-03-29 20:51:04

标签: python pandas

我有一个看起来像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

如您所见,如果我们忽略c1c2是不同的列(或者如果它们变成相反的列),则会重复行1和3。但是,第5行不是。无论重复值在哪里,如何基于列c1c2删除行?

预先感谢

3 个答案:

答案 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()]