生成一列数据的历史分位数

没有现成的函数,二分法到是可以实现……,不过数据量一大,这玩意可不是一般慢,还是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  # 返回分位数列表

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值