使用python 计算百分位数实现数据分箱代码


Posted in Python onMarch 03, 2020

对于百分位数,相信大家都比较熟悉,以下解释源引自百度百科。

百分位数,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组n个观测值按数值大小排列。如,处于p%位置的值称第p百分位数。

因为百分位数是采用等分的方式划分数据,因此也可用此方法进行等频分箱。

import pandas as pd
import numpy as np
import random
t=pd.DataFrame(columns=['l','s'])
#随机生成1000个0到999整数
t['l']=[random.randint(0,999) for _range in range(1000)]
#定义s为1,便于统计
t['s']=1
#通过np.percentile找到分位点
l_bin=[]
for i in range(0,101,10):
 l_bin.append(np.percentile(t['l'],i))
#分位点最后一个数加上一个极小的数,否则切分后数字999会标记为nan
l_bin[-1]+=1/1e10
print('分位点:',np.array(l_bin).round(2))
#对随机数进行切分,right=False时左闭右开
t['box']=pd.cut(t['l'],l_bin,right=False)
tj=t.groupby('box')['s'].agg('sum')
print('分箱统计')
print(tj)
#生成新的标签
label=[]
for i in range(len(l_bin)-1):
 label.append(str(l_bin[i].round(4))+'+')
#原标签和自定义的新标签生成字典 
list_box_td=list(set(t['box']))
list_box_td.sort()
dict_t=dict(zip(list_box_td,label))
#根据字典进行替换
t['new_box']=t['box'].replace(dict_t)
print('新分箱统计')
tj=t.groupby('new_box')['s'].agg('sum')
print(tj)
del t['s']
print(t.head())

输出结果:

分位点: [ 0. 90.9 194.6 290. 386. 473.5 589. 688. 783.2 884.2
 997. ]
分箱统计
box
[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
Name: s, 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
Name: s, 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, size=10), columns=['value']) # 生成[1,10]的随机整数
test['pct_sf'] = test.index.map(lambda x: test.ix[:x].value.rank(pct=True)[x]) # 动态时点
test['pct'] = test.value.rank(pct=True) # 当前时点
test

使用python 计算百分位数实现数据分箱代码

以上这篇使用python 计算百分位数实现数据分箱代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中Collections模块的Counter容器类使用教程
May 31 Python
用Python设计一个经典小游戏
May 15 Python
tensorflow获取变量维度信息
Mar 10 Python
Pycharm 设置自定义背景颜色的图文教程
May 23 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
python使用tkinter库实现五子棋游戏
Jun 18 Python
Python创建空列表的字典2种方法详解
Feb 13 Python
记一次Django响应超慢的解决过程
Sep 17 Python
使用AJAX和Django获取数据的方法实例
Oct 25 Python
matplotlib之pyplot模块之标题(title()和suptitle())
Feb 22 Python
pytorch finetuning 自己的图片进行训练操作
Jun 05 Python
利用Python计算KS的实例详解
Mar 03 #Python
python如何提取英语pdf内容并翻译
Mar 03 #Python
Pycharm如何运行.py文件的方法步骤
Mar 03 #Python
python生成大写32位uuid代码
Mar 03 #Python
python str字符串转uuid实例
Mar 03 #Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 #Python
python生成并处理uuid的实现方式
Mar 03 #Python
You might like
Zend 输出产生XML解析错误
2009/03/03 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
php制作动态随机验证码
2015/02/12 PHP
JavaScript asp.net 获取当前超链接中的文本
2009/04/14 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
AngularJs Javascript MVC 框架
2016/06/20 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
Vue2组件tree实现无限级树形菜单
2017/03/29 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
VUE安装使用教程详解
2019/06/03 Javascript
微信小程序开发(二):页面跳转并传参操作示例
2020/06/01 Javascript
跟老齐学Python之for循环语句
2014/10/02 Python
python中元类用法实例
2014/10/10 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
numpy.where() 用法详解
2019/05/27 Python
创建Django项目图文实例详解
2019/06/06 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
Python捕获异常堆栈信息的几种方法(小结)
2020/05/18 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
优秀的毕业生的自我评价
2013/12/12 职场文书
全陪导游欢迎词
2014/01/17 职场文书
师德建设实施方案
2014/03/21 职场文书
责任胜于能力演讲稿
2014/05/20 职场文书
入党自荐书范文
2015/03/05 职场文书
Mongo服务重启异常问题的处理方法
2021/07/01 MongoDB