我正在尝试查找在两列中具有唯一值对的行,因此此数据框:
A B
1 0
2 0
3 0
0 1
2 1
3 1
0 2
1 2
3 2
0 3
1 3
2 3
Run Code Online (Sandbox Code Playgroud)
将减少到仅翻转时不匹配的行,例如 1 和 3 是我只想返回一次的组合。因此,检查是否存在相同的对,如果翻转列(3 和 1),则可以将其删除。我想要得到的表是:
A B
0 2
0 3
1 0
1 2
1 3
2 3
Run Code Online (Sandbox Code Playgroud)
如果翻转列,则镜像的每对值仅出现一次。
我认为你可以使用+ :apply sorteddrop_duplicates
df = df.apply(sorted, axis=1).drop_duplicates()
print (df)
A B
0 0 1
1 0 2
2 0 3
4 1 2
5 1 3
8 2 3
Run Code Online (Sandbox Code Playgroud)
更快的解决方案numpy.sort:
df = pd.DataFrame(np.sort(df.values, axis=1), index=df.index, columns=df.columns)
.drop_duplicates()
print (df)
A B
0 0 1
1 0 2
2 0 3
4 1 2
5 1 3
8 2 3
Run Code Online (Sandbox Code Playgroud)
不使用DataFrame.minand排序的解决方案DataFrame.max:
a = df.min(axis=1)
b = df.max(axis=1)
df['A'] = a
df['B'] = b
df = df.drop_duplicates()
print (df)
A B
0 0 1
1 0 2
2 0 3
4 1 2
5 1 3
8 2 3
Run Code Online (Sandbox Code Playgroud)