使用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 用正则表达式筛选文本信息的实例
Jun 05 Python
Python 通过打码平台实现验证码的实现
May 13 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
Python中的self用法详解
Aug 06 Python
python3实现带多张图片、附件的邮件发送
Aug 10 Python
python tkinter组件摆放方式详解
Sep 16 Python
Python连接字符串过程详解
Jan 06 Python
Pycharm小白级简单使用教程
Jan 08 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 Python
简单了解Python变量作用域正确使用方法
Jun 12 Python
Opencv常见图像格式Data Type及代码实例
Nov 02 Python
java字符串格式化输出实例讲解
Jan 06 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
phpMyAdmin 安装教程全攻略
2007/03/19 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
PHP容易忘记的知识点分享
2013/04/30 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
python小技巧之批量抓取美女图片
2014/06/06 Python
python中Genarator函数用法分析
2015/04/08 Python
Python基于TCP实现会聊天的小机器人功能示例
2018/04/09 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
python版大富翁源代码分享
2018/11/19 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
python交易记录链的实现过程详解
2019/07/03 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
C语言如何决定使用那种整数类型
2016/11/26 面试题
2015年党风廉政建设工作总结
2015/04/09 职场文书
Pyhton模块和包相关知识总结
2021/05/12 Python