数据帧最大匹配两列

3
我有一个数据框,我正在寻找一种方法来找到两列上唯一匹配对的最大数字。 例如,如果我将我的数据框限制在这两列上:
X Y 1 a 1 b 2 c 2 d 3 b 3 a 4 c 4 d 4 e 5 e 5 c
结果应该是:
X Y
1 a
2 c
3 b
4 d
5 e

所以如果我匹配了1a,那么我就不能再使用1作为列X的值,也不能再使用a作为Y的值。

困难的部分是根据这个规则尽可能多地匹配成对。

非常感谢。

1个回答

2

我会在linear_sum_assignment上使用crosstab

from scipy.optimize import linear_sum_assignment

tmp = pd.crosstab(df['X'], df['Y'])

idx, col = linear_sum_assignment(tmp, maximize=True)

out = pd.DataFrame({'X': tmp.index[idx], 'Y': tmp.columns[col]})

输出:

   X  Y
0  1  a
1  2  c
2  3  b
3  4  d
4  5  e

中级交叉表(tmp):
Y  a  b  c  d  e
X               
1  1  1  0  0  0
2  0  0  1  1  0
3  1  1  0  0  0
4  0  0  1  1  1
5  0  0  1  0  1

其他例子
# df: here we removed the 3/b and 5/e pairs
   X  Y
0  1  a
1  1  b
2  2  c
3  2  d
4  3  a
5  4  c
6  4  d
7  4  e
8  5  c

# out
   X  Y
0  1  b
1  2  d
2  3  a
3  4  e
4  5  c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接