使用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使用urllib2获取网络资源实例讲解
Dec 02 Python
Python简单日志处理类分享
Feb 14 Python
对python_discover方法遍历所有执行的用例详解
Feb 13 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 Python
使用python打印十行杨辉三角过程详解
Jul 10 Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 Python
python脚本后台执行方式
Dec 21 Python
新建文件时Pycharm中自动设置头部模板信息的方法
Apr 17 Python
Python操作CSV格式文件的方法大全
Jul 15 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 Python
Python中使用tkFileDialog实现文件选择、保存和路径选择
May 20 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中$this和$that指针使用实例
2015/01/06 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
利用js对象弹出一个层
2008/03/26 Javascript
Javascript模块模式分析
2008/05/16 Javascript
Jquery下的26个实用小技巧(jQuery tips, tricks & solutions)
2010/03/01 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
2011/10/13 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
2种在vue项目中使用百度地图的简单方法
2018/09/28 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
python中列表和元组的区别
2017/12/18 Python
python实现对求解最长回文子串的动态规划算法
2018/06/02 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
从0开始的Python学习016异常
2019/04/08 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
一款恶搞头像特效的制作过程 利用css3和jquery
2014/11/21 HTML / CSS
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
党员个人年度总结
2015/02/14 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
小学英语听课心得体会
2016/01/14 职场文书
遇事可以测出您的见识与格局
2019/09/16 职场文书