使用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 相关文章推荐
win7 下搭建sublime的python开发环境的配置方法
Jun 18 Python
python分析nignx访问日志脚本分享
Feb 26 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
Aug 18 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
Apr 23 Python
Python对HTML转义字符进行反转义的实现方法
Apr 28 Python
pyqt5 使用label控件实时显示时间的实例
Jun 14 Python
python tornado修改log输出方式
Nov 18 Python
使用Python求解带约束的最优化问题详解
Feb 11 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
Python实现仿射密码的思路详解
Apr 23 Python
python如何解析复杂sql,实现数据库和表的提取的实例剖析
May 15 Python
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
Nov 01 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
PHP中防止SQL注入实现代码
2011/02/19 PHP
php线性表的入栈与出栈实例分析
2015/06/12 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
php截取视频指定帧为图片
2016/05/16 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
jQuery-ui引入后Vs2008的无智能提示问题解决方法
2014/02/10 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
bootstrap手风琴制作方法详解
2017/01/11 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
微信小程序版翻牌小游戏
2018/01/26 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
python中的闭包用法实例详解
2015/05/05 Python
python 中的divmod数字处理函数浅析
2017/10/17 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
Sanic框架请求与响应实例分析
2018/07/16 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
tornado+celery的简单使用详解
2019/12/21 Python
Python对象的属性访问过程详解
2020/03/05 Python
Python利用命名空间解析XML文档
2020/08/10 Python
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
英国手工布艺沙发在线购买:Sofas & Stuff
2018/03/02 全球购物
实用求职信范文分享
2013/12/25 职场文书
团日活动总结书格式
2014/05/08 职场文书
评先进个人材料
2014/12/29 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
八年级作文之友情
2019/11/25 职场文书
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python