如何使用python计算百分位数实现数据分箱

  介绍

小编给大家分享一下如何使用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), #,当前时的点   之前测试

如何使用python计算百分位数实现数据分箱

如何使用python计算百分位数实现数据分箱