如何删除数据框中的类似对值?

时间:2017-06-02 11:47:32

标签: pandas

输入:

   Source   Target    
      A        A          
      A        B          
      A        C          
      B        A          
      B        C          
      C        A          
      C        B  
      B        B

输出:

   Source   Target    
      A        A          
      A        B          
      A        C               
      B        C          

我想要的结果是当有像

这样的列的结构时
   Source   Target    
      B        A          
      A        B  

,它会删除其中一行(B AA B)。

1 个答案:

答案 0 :(得分:2)

您似乎需要apply sorted并按duplicated获取重复项,并按boolean indexing过滤,~反转布尔值掩码:

cols = ['Source','Target']
df = df[~df[cols].apply(sorted, axis=1).duplicated()]
print (df)
  Source Target
0      A      A
1      A      B
2      A      C
4      B      C
7      B      B

numpy.sort的另一个解决方案:

cols = ['Source','Target']
df = df[~pd.DataFrame(np.sort(df[cols], axis=1), columns=cols).duplicated()]
print (df)
  Source Target
0      A      A
1      A      B
2      A      C
4      B      C
7      B      B

另一个解决方案,如果只有2列drop_duplicates

df = df.apply(sorted, axis=1).drop_duplicates()
print (df)
  Source Target
0      A      A
1      A      B
2      A      C
4      B      C
7      B      B