输入:
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 A
或A B
)。
答案 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