python - 排名聚合: Merge local subrankings into global ranking

标签 python sorting ranking rank ranking-functions

我有一个包含多个本地商店排名的数据集,我希望以编程方式将其汇总/合并为一个全国排名。我知道本地排名是按销量计算的,但我没有给出销量,因此必须使用相对排名来创建尽可能准确的全国排名。

举一个简短的例子,假设我们有 3 个本地排名列表,从最佳排名(第 1 位)到最差排名(最后一位),它们代表可以相互重叠的不同地理边界。

ranking_1 = ['J','A','Z','B','C']
ranking_2 = ['A','H','K','B']
ranking_3 = ['Q','O','A','N','K']

我们知道 J 或 Q 是排名最高的商店,因为它们分别在ranking_1和ranking_3中最高,并且它们出现在ranking_2中最高的A之上。我们知道 O 是下一个,因为它在 rating_3 中位于 A 之上。接下来是 A,依此类推...

如果我在纸上正确地做到了这一点,这个简短示例的输出将是:

global_ranking = [('J',1.5),('Q',1.5),('O',3),('A',4),('H',6),('N',6),('Z',6),('K',8),('B',9),('C',10)]

请注意,当我们没有足够的数据来确定两个商店中哪一个排名较高时,我们将其视为平局(即我们知道 J 或 Q 之一是排名最高的商店,但不知道哪个商店排名最高)更高,所以我们将它们都设置为 1.5)。 在实际数据集中,有 100 多个列表,每个列表有 1000 多个项目。

我很高兴尝试解决这个问题,并且很好奇是否有人有任何聪明的方法来解决它。

最佳答案

修改Merge Sort algorithm会在这里提供帮助。修改应考虑到不可比较的存储,并构建您愿意视为相等的不可比较的元素组(例如 Q 和 J)

关于python - 排名聚合: Merge local subrankings into global ranking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59940357/

相关文章:

Python:绑定(bind)套接字: "Address already in use"

Python - Windows 关机事件

python - 为什么容器的最大尺寸有符号位?

bash - 如何在 bash 中对语义版本进行排序?

r - 基于变量中前 N 个最频繁值的子集数据框

使用 NTLM 进行 Python Mechanize 时出现 AttributeError : HTTPResponse instance has no attribute '__iter__'

ios - 将一个 NSArray 按另一个带有 id 的 nsarray 排序

python - 对具有反向阶段的列表进行排序

sql - MySQL View 中的行排名

mysql - 根据类(class)对学生进行排名