将列表中的每个值映射到一个百分位数,但值越低越好
Map each value in list to a percentile, but where the lower values are better
所以,我有一个包含 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]
如果您的数组已排序(或未排序),并且您想按固定数量移动到每个项目(第一个获得 0%,第二个获得 5%(根据长度计算),第三个获得 10% .. .):
def get_score(array, item):
i = sorted(array).index(item)
return i * 100 / (len(array) - 1)
我做了这个算法:数字越小,百分位数越高,如果数据中的数字越大,数字越小,百分位数越多。
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]
我做了另一种算法:这个算法是基于排序列表中数字的索引。
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]
所以,我有一个包含 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]
如果您的数组已排序(或未排序),并且您想按固定数量移动到每个项目(第一个获得 0%,第二个获得 5%(根据长度计算),第三个获得 10% .. .):
def get_score(array, item):
i = sorted(array).index(item)
return i * 100 / (len(array) - 1)
我做了这个算法:数字越小,百分位数越高,如果数据中的数字越大,数字越小,百分位数越多。
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]
我做了另一种算法:这个算法是基于排序列表中数字的索引。
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]