使用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 相关文章推荐
wxPython中listbox用法实例详解
Jun 01 Python
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
Python读取Word(.docx)正文信息的方法
Mar 15 Python
python linecache 处理固定格式文本数据的方法
Jan 08 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
Python面向对象程序设计类的封装与继承用法示例
Apr 12 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 Python
Django缓存Cache使用详解
Nov 30 Python
python+playwright微软自动化工具的使用
Feb 02 Python
Python Django框架介绍之模板标签及模板的继承
May 27 Python
Python合并pdf文件的工具
Jul 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 include_path设置技巧分享
2011/07/03 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
javascript 隔行换色函数代码
2010/10/24 Javascript
JavaScript创建一个欢迎cookie弹出窗实现代码
2013/03/15 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
实例详解angularjs和ajax的结合使用
2015/10/22 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
vue学习笔记之指令v-text && v-html && v-bind详解
2017/05/12 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
Vue中JS动画与Velocity.js的结合使用
2019/02/13 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
2017/05/25 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
2018/04/28 Python
python里 super类的工作原理详解
2019/06/19 Python
python opencv鼠标事件实现画框圈定目标获取坐标信息
2020/04/18 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
Django中的FBV和CBV用法详解
2019/09/15 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
西班牙鞋子和箱包在线销售网站:zapatos.es
2020/02/17 全球购物
2014年五四青年节活动策划书
2014/04/22 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
四风问题查摆剖析材料
2014/10/11 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
演讲比赛主持词
2015/06/29 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书