如何为匹配的数据框列赋予权重?

How to give weights to matching dataframe columns?

我有一个包含多列和多行的数据框。我想要求用户输入行号并输出 3 个最相似的行。我要使用的排名策略是:

1- 每个属性匹配的权重为 1

2- 根据属性的位置对匹配进行加权。

假设用户输入了行号“30”。行号“12”和“5”都有 5 个匹配元素,这是其中匹配分数最高的。行号“23”有 4 个匹配元素,是其他元素中第二高的匹配分数。

row-30 =[ 2 13  7  1  7 10  1  8  7  1]

row-12 =[11  5  4  1  7 13  1  8  7  4]

row-5 =[ 2 13  7  1 12  5  6  8 15  8]

row-23 =[ 2 10  5  1  3 10  9 10  7  6]

然后我想根据火柴的位置计算权重。最左边的匹配应获得最高分,最右边的匹配应获得最低分。

因此,排名应该是5-12-23。

我可以使用以下代码块根据第一个要求获得正确的排名:

sorted(total_matchs, key=lambda x:x[1],reverse=True)[:3]

其中 total_matchs 是由行号和匹配分数组成的元组列表。但是我无法为基于位置的匹配权重的第二个要求构建正确的算法。

谁能帮我找到正确的算法?

你已经有了匹配计数,很好。

Then I want to calculate the weights based on the position of the matches. The left-most match should get the highest score and the right-most match should get the lowest score.

我们希望对两件不同的事情进行分类。 一般来说,它们可以是任何可比较的东西,比如字符串或实数, 我们必须对 2 元组进行排序。

但这里碰巧我们有整数计数,可以提升为 FP 分数。定义一个非常小的数 epsilon 和一个最大索引 K:

eps = .001
k = 10

并用它把你的两个值塞进一个 FP 数中:

match_count + eps * (k - index)

这样的分数会很好排序,然后你就把前三名提取出来, 例如,它可能给出 [2.007, 2.005, 2.001]

的“双重匹配”分数