Python 从数据帧中删除镜像对
我有一个像这样的数据框Python 从数据帧中删除镜像对,python,pandas,dataframe,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 A B C D E a b .1 .3 .9 c d .2 .4 .5 因为第3行和第4行与第1行和第2行相同,所以我需要删除它们。最终的数据帧如下所示 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 A B C D
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
A B C D E
a b .1 .3 .9
c d .2 .4 .5
因为第3行和第4行与第1行和第2行相同,所以我需要删除它们。最终的数据帧如下所示
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
A B C D E
a b .1 .3 .9
c d .2 .4 .5
df.drop_duplicates仅删除相似对,而不删除镜像对。是否有任何简单的方法可以在pandas中实现以删除此类镜像副本。谢谢
编辑:
我刚刚尝试过删除重复项(subset=['C','D','E']),它将给出这个数据帧的结果。是否有其他基于“A”、“B”的解决方案 使用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]
np.排序
+删除重复项
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
A
和B
列是不同的。你如何定义“相同”?亚历克斯他把它们看作是“镜子”。哦,是的。。。np.sort()。。。但是,我不会使用“last”,因为3个或更多的重复值只会删除last。因此使用了~and keep='first'(默认值)。很好!但不要忘记~或再次得到3或更多的多个值。hehe@JaswanthKumaryw~:-)快乐编码