我有一个看起来像这样的数据框
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'的解决方案。
答案 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]