Pandas从数据帧中删除镜像对

时间:2018-01-31 19:05:06

标签: python pandas dataframe

我有一个看起来像这样的数据框

A  B  C  D  E
a  b .1 .3 .9
c  d .2 .4 .5
b  a .1 .3 .9
d  c .2 .4 .5

由于第3和第4行与第1行和第2行相同,我需要将它们删除。最终的数据框将如下所示

A  B  C  D  E
a  b .1 .3 .9
c  d .2 .4 .5

df.drop_duplicates仅删除相似的对但不删除镜像对。是否有任何简单的方法在pandas中实现删除此类镜像重复项。谢谢!

编辑: 我刚试过drop_duplicates(subset = ['C','D','E']),它会给出这个数据帧的结果。还有其他基于'A','B'的解决方案。

2 个答案:

答案 0 :(得分:2)

np.sort + drop_duplicates

df.loc[pd.DataFrame(np.sort(df[['A','B']],1),index=df.index).drop_duplicates(keep='first').index]
Out[316]: 
   A  B    C    D    E
0  a  b  0.1  0.3  0.9
1  c  d  0.2  0.4  0.5

答案 1 :(得分:1)

可能不是最有效率,因为它使用apply,但这是一个选项:

import pandas as pd

data ='''\
A  B  C  D  E
a  b .1 .3 .9
c  d .2 .4 .5
b  a .1 .3 .9
d  c .2 .4 .5'''

df = pd.read_csv(pd.compat.StringIO(data), sep='\s+')

mask = df[['A','B']].apply(lambda x: list(set(x)), axis=1).duplicated()

df[~mask]