返回跨列具有唯一对的行

ric*_*out 2 python pandas

我正在尝试查找在两列中具有唯一值对的行,因此此数据框:

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)

如果翻转列,则镜像的每对值仅出现一次。

jez*_*ael 6

我认为你可以使用+ :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)