这个好像没有直接的函数实现,那就自己写吧。因为分位数函数np.percentile()是单调函数,这里使用二分法求解。
import numpy as np
def arg_percentile(series, x):
# 分位数的启始区间
a, b = 0, 1
while True:
# m是a、b的终点
m = (a+b)/2
# 可以打印查看求解过程
# print(np.percentile(series, 100*m), x)
if np.percentile(series, 100*m) >= x:
b = m
elif np.percentile(series, 100*m) < x:
a = m
# 如果区间左右端点足够靠近,则退出循环。
if np.abs(a-b) <= 0.000001:
break
return m
如何使用?
series可以是np.array也可以是pandas.Series,x是待求分位数的数字。举例如下:
s = np.array([1, 3, 4, 4, 6, 7, 8, 9, 10, 11, 13, 15])
x = 12
p = arg_percentile(s, x)
print(p)
# 结果是 0.8636369705200195
希望对你有帮助。