如何计算给定百分位数的十分位数函数



我有一个百分位数(浮点值在0-100范围内(。计算十分位数(D01-D10(最优雅的pytonish方法是什么?

我对四分位数有类似的函数:

def quartile(percentile):
p = 100 - percentile
if p <= 25:
return 'Q1'
elif p <= 50:
return 'Q2'
elif p <= 75:
return 'Q3'
else:
return 'Q4'

我想避免写十个条件。

期望输出:

>>> decile(95.5)
'D01'
>>> decile(8.3)
'D10'

您可以用一个简单的算术实现来替换quartile函数:

def quartile(percentile):
return f"Q{min(100 - percentile, 99) // 25 + 1}"

这给了我们:

>>> quartile(100)
'Q1'
>>> quartile(75)
'Q2'
>>> quartile(76)
'Q1'
>>> quartile(0)
'Q4'

类似的decile实现是:

def decile(percentile):
return f"D{min(100 - percentile, 99) // 10 + 1}"

这两个函数非常相似,你甚至可以通过一个更高阶的函数来定义它们:

def ntile(n, symbol):
return lambda p: f"{symbol}{min(100 - p, 99) // n + 1}"
quartile = ntile(4, "Q")
decile = ntile(10, "D")
vigintile = ntile(20, "V")
# etc

最新更新