介绍
小编给大家分享一下如何使用python计算百分位数实现数据分箱,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
python的优点有哪些
1,简单易用,与C/c++、Java、c#等传统语言相比,python对代码格式的要求没有那么严格;2,python属于开源的,所有人都可以看到源代码,并且可以被移植在许多平台上使用;3,python面向对象,能够支持面向过程编程,也支持面向对象编程;4,python是一种解释性语言,python写的程序不需要编译成二进制代码,可以直接从源代码运行程序;5,python功能强大,拥有的模块众多,基本能够实现所有的常见功能。
百分位的数,如果将一组数据从小到大排的序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组n个观测值按数值大小排列,如处于p %位置的值称第p百分位数。
因为百分位数是采用等分的方式划分数据,因此也可用此方法进行等频分箱。
import pandas as pd import numpy  as np import 随机 t=pd.DataFrame(列=[& # 39;l # 39; & # 39; & # 39;]) #随机生成1000个0到999整数 t [& # 39; l # 39;]=[random.randint (0999), for _range 拷贝范围(1000)) #定义为1,便于统计 t [& # 39; & # 39;]=1 #通过np.percentile找到分位点 l_bin=[] for 小姐:拷贝范围(0101年,10): ,l_bin.append (np.percentile (t [& # 39; l # 39;], i)) #分位点最后一个数加上一个极小的数,否则切分后数字999会标记为南 l_bin [1] +=1/1e10 打印(& # 39;分位点:& # 39;,np.array (l_bin) .round (2)) #对随机数进行切分,右=False时左闭右开 t[& # 39;盒# 39;]=pd.cut (t [& # 39; l # 39;], l_bin,右=False) tj=t.groupby(& # 39;盒# 39;)[& # 39;& # 39;].agg(& # 39;和# 39;) 打印(& # 39;分箱统计& # 39;) 打印(tj) #生成新的标签 标签=[] for 小姐:拷贝范围(len (l_bin) 1): [我],label.append (str (l_bin .round (4) + & # 39; + & # 39;) #原标签和自定义的新标签生成字典, list_box_td=列表(组(t[& # 39;盒# 39;))) list_box_td.sort () dict_t=dict (zip (list_box_td、标签) #根据字典进行替换 t [& # 39; new_box& # 39;]=t[& # 39;盒# 39;].replace (dict_t) 打印(& # 39;新分箱统计& # 39;) tj=t.groupby (& # 39; new_box& # 39;) [& # 39; & # 39;] .agg(& # 39;和# 39;) 打印(tj) del t [& # 39; & # 39;] print (t.head ())
输出结果:
分位点:,(90.9,194.6,0只,290只,386只,473.5,589只,688只,783.2,884.2 ,997只) 分箱统计 盒子 [0.0,90.9),,100 [90.9,194.6),,100 [194.6,290.0),,99 [290.0,386.0),,99 [386.0,473.5),102年 [473.5,589.0),,99 [589.0,688.0),100年 [688.0,783.2),101年 [783.2,884.2),100年 [884.2,997.0),100年 名称:,,,dtype: int64 新分箱统计 new_box 0.0 +,100 194.6 +,99 290.0 +,99 386.0 + 102 473.5 +,99 589.0 + 100 688.0 + 101 783.2 + 100 884.2 + 100 90.9 +,100 名称:,,,dtype: int64 l 才能,,,box new_box 0,253,(194.6,290.0),194.6 + 1,468,(386.0,473.5),386.0 + 2,130,(90.9,194.6),90.9 + 3,476,(473.5,589.0),473.5 + 4,656,(589.0,688.0),589.0 +
可以看出每个分箱内,约有100个数字。根据这个方法,可以自定义一些标签。
<强>补充拓展:python计算动态时点的百分位数强>
【说明】
1, <强>动态时点:强>每次计算的数据框为截止于当前行的数据,即累计行(多次计算),
2,静态时点(当前时间):计算的数据框为所有行(一次计算),
【代码】
test =, pd.DataFrame (np.random.randint(1, 10日,大?10),,列=[& # 39;价值# 39;]),#,生成[1,10]的随机整数 测试(& # 39;pct_sf& # 39;],=, test.index.map (lambda x:, test.ix [x] .value.rank (pct=True) [x]), #,动态时的点 测试(& # 39;pct # 39;],=, test.value.rank (pct=True), #,当前时的点 之前测试>