没有现成的函数,二分法到是可以实现……,不过数据量一大,这玩意可不是一般慢,还是EXCEL来得快 np.percentile(series, m*100)是numpy中的函数,参数是数据系列,分位数 import numpy as np def f_pers(series): # 定义函数,参数是数据本身 pre_list = [] # 空列表装每个数据的历史分位 for i in series: a, b = 0, 1 # 分位的起始区间0%-100% while True: m = (a+b)/2 # 初始分位是50% if np.percentile(series, m*100) >= i: # 如果目标数据小于50%的分位对应的数据,目标数据的历史分位缩小为[0%,50%],下一次的m就是25%,目标数据可能位于0-0.25,也可能位于0.25-0.5,往复循环即可 b = m elif np.percentile(series, m*100) < i: a = m if np.abs(a-b)<=0.0001: # 循环至左右边界误差在4个百分点以后,然后终止 break pre_list.append(round(m,3)) # 把每个数据的分位数放在列表中,取3个小数点 return pre_list # 返回分位数列表
生成一列数据的历史分位数
于 2022-11-16 17:37:43 首次发布