【问题标题】:Map each value in list to a percentile, but where the lower values are better将列表中的每个值映射到百分位数,但值越低越好
【发布时间】:2021-12-03 09:50:19
【问题描述】:

所以,我有一个包含 25 个分数的列表,范围从 60 到 500

lst= [60, 65, 89, 200, 220, 73, 340, 500.....65]

分数越低,分数越高。我想为这些分数中的每一个分配一个百分位数,以显示哪些分数是最好的/哪些是最差的。但是,当分数越低越好(而分数越高越好)时,​​我不确定如何执行此操作。

我认为这将是一个与我正在寻找的相反的例子:

percentileofscore([1, 2, 3, 4], 3)
75.0
percentiles = [percentileofscore(data, i) for i in data]

【问题讨论】:

  • 这个值可以是任何值,比如 1、2、3?例如将 [60, 65, 89] 映射到 [1, 2, 3]?
  • 你不能计算假设越高越好,然后只做你计算的 100。 IE。您假设数字越大越好,并且您计算的值位于第 75 个百分位,100-75=25。

标签: python percentile


【解决方案1】:

我做了另一种算法:这个算法是基于排序列表中数字的索引。

def percentileofscore(data, i):
    index = sorted(set(data), reverse=True).index(i)  # index of number in sorted list
    return (100 / len(data)) * (index+1)  # making that a percentile

data = [1, 2, 3, 4]
percentiles = [percentileofscore(data, i) for i in data]

percentile

[100.0, 75.0, 50.0, 25.0]

最小的数字是 100。

更多示例

[3, 10, 2] -> [66.66666666666667, 33.333333333333336, 100.0]

[4, 7, 1, 3, 10] -> [60.0, 40.0, 100.0, 80.0, 20.0]

[62, 7, 81, 20] -> [50.0, 100.0, 25.0, 75.0]

【讨论】:

  • 谢谢!但是,当有两个或多个分数相等时呢?
  • 是的,这将给出不同的百分位数相同的值,所以你可以写sorted(set(data), reverse=True),这样它就会给出相同的百分位数相同的值。 (我编辑)
【解决方案2】:

我做了这个算法:数字越小,百分位数越高,如果数据中的数字越大,数字越小百分位数越高。

def percentileofscore(data, i):
    m = max(data)  # highest number
    s = m - i  # a number that defines the score (higher if i is lower)
    return (s*100) / m  # making that a percentile


data = [1, 2, 3, 4]
percentiles = [percentileofscore(data, i) for i in data]

percentile

[75.0, 50.0, 25.0, 0.0]

最小的数字不是 100,但最大的数字是 0。

更多示例

[3, 10, 2] -> [70.0, 0.0, 80.0]

[2, 3, 4] -> [50.0, 25.0, 0.0]

[62, 70, 81] -> [23.45679012345679, 13.580246913580247, 0.0]

【讨论】:

    【解决方案3】:

    如果您的数组已排序(或未排序),并且您希望将固定数量移动到每个项目(第一个获得 0%,第二个获得 5%(根据长度计算),第三个获得 10% ...) :

    def get_score(array, item):
        i = sorted(array).index(item)
        return i * 100 / (len(array) - 1)
    

    【讨论】:

      猜你喜欢
      • 2018-06-24
      • 2012-09-07
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多