pandas 匹配两列的Dataframe max

wkyowqbh  于 2023-08-01  发布在  其他
关注(0)|答案(1)|浏览(80)

我有一个Dataframe,我正在寻找一种方法来找到两列唯一匹配对的最大数量。例如,如果我将Dataframe限制为仅这两列:
| Y| Y |
| --| ------------ |
| 一个| a |
| B| b |
| c型| c |
| d的| d |
| B| b |
| 一个| a |
| c型| c |
| d的| d |
| 电子| e |
| 电子| e |
| c型| c |
结果应该是:
| Y| Y |
| --| ------------ |
| 一个| a |
| c型| c |
| B| b |
| d的| d |
| 电子| e |
因此,如果匹配1&a,则无法再将1用于列X,也无法再将a用于Y

  • 困难的部分是用这个规则匹配最大数量的配对。*

多谢了。

3bygqnnd

3bygqnnd1#

我会在crosstab上使用linear_sum_assignment

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

相关问题