我相信您需要对两列进行排序np.sort
并过滤DataFrame.duplicated使用反掩码:
df1 = pd.DataFrame(np.sort(DF1[['Id1', 'Id2']].to_numpy(), axis=1), index=DF1.index)
df = DF1[~df1.duplicated()]
print (df)
Id1 Id2
0 286 409
1 286 257
3 257 183
Detail:如果使用numpy.sort with axis=1
它按行排序,所以第一和第三'row'
是相同的:
print (np.sort(DF1[['Id1', 'Id2']].to_numpy(), axis=1))
[[286 409]
[257 286]
[286 409]
[183 257]]
然后使用DataFrame.duplicated函数(使用 DataFrame,因此使用 DataFrame 构造函数):
df1 = pd.DataFrame(np.sort(DF1[['Id1', 'Id2']].to_numpy(), axis=1), index=DF1.index)
print (df1)
0 1
0 286 409
1 257 286
2 286 409
3 183 257
第三个值是重复的:
print (df1.duplicated())
0 False
1 False
2 True
3 False
dtype: bool
最后是删除重复项所必需的反转掩码,输出被过滤boolean indexing:
print (DF1[~df1.duplicated()])
Id1 Id2
0 286 409
1 286 257
3 257 183