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

这篇博客介绍了一种利用numpy库计算数据历史分位数的算法,通过二分法实现,但指出当数据量较大时效率较低。作者提供了一个自定义函数`f_pers()`,该函数遍历数据并逐步缩小区间以找到每个数据点的精确分位数,最终将所有分位数存储在列表中。虽然方法有效,但作者建议对于大数据集,Excel可能是更快的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值