使用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内置模块ConfigParser实现配置读写功能的方法
Feb 12 Python
python实现简单登陆流程的方法
Apr 22 Python
pip install urllib2不能安装的解决方法
Jun 12 Python
Numpy中的mask的使用
Jul 21 Python
python http基本验证方法
Dec 26 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
Apr 15 Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 Python
python面试题之列表声明实例分析
Jul 08 Python
django多文件上传,form提交,多对多外键保存的实例
Aug 06 Python
Python爬取爱奇艺电影信息代码实例
Nov 26 Python
通过实例简单了解python yield使用方法
Aug 06 Python
如何在python中实现ECDSA你知道吗
Nov 23 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
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
php远程下载类分享
2016/04/13 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
JavaScript静态的动态
2006/09/18 Javascript
Mootools 1.2教程(21)——类(二)
2009/09/15 Javascript
js读取本地excel文档数据的代码
2010/11/11 Javascript
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
vue项目国际化vue-i18n的安装使用教程
2018/03/14 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
nodejs各种姿势断点调试的方法
2020/06/18 NodeJs
vue离开当前页面触发的函数代码
2020/09/01 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
Python中统计函数运行耗时的方法
2015/05/05 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
时尚圣经:The Fashion Bible
2019/03/03 全球购物
《跨越海峡的生命桥》教学反思
2014/02/24 职场文书
地道战观后感400字
2015/06/04 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
销售口号霸气押韵
2015/12/24 职场文书
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python
python tkinter Entry控件的焦点移动操作
2021/05/22 Python