使用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基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
python实现从字符串中找出字符1的位置以及个数的方法
Aug 25 Python
基于python时间处理方法(详解)
Aug 14 Python
Python机器学习之K-Means聚类实现详解
Feb 22 Python
用Python将mysql数据导出成json的方法
Aug 21 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
Python中bisect的使用方法
Dec 31 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
Selenium启动Chrome时配置选项详解
Mar 18 Python
Java Spring项目国际化(i18n)详细方法与实例
Mar 20 Python
基于python纯函数实现井字棋游戏
May 27 Python
python 爬取B站原视频的实例代码
Sep 09 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之第二天
2006/10/09 PHP
生成静态页面的php函数,php爱好者站推荐
2007/03/19 PHP
php 404错误页面实现代码
2009/06/22 PHP
Yii2增删改查之查询 where参数详细介绍
2016/08/08 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
tp5框架使用composer实现日志记录功能示例
2019/01/10 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
发现的以前不知道的函数
2006/09/19 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
javascript调试之DOM断点调试法使用技巧分享
2014/04/15 Javascript
javascript实现动态模态绑定grid过程代码
2014/09/22 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
javascript实现树形菜单的方法
2015/07/17 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
JS作用域链详解
2017/06/26 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
使用原生js编写一个简单的框选功能方法
2019/05/13 Javascript
node.js通过url读取文件
2020/10/16 Javascript
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
python随机生成指定长度密码的方法
2015/04/04 Python
python插入数据到列表的方法
2015/04/30 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
syb养殖创业计划书
2014/01/09 职场文书
单位刻章介绍信范文
2014/01/11 职场文书
2016年圣诞节寄语(一句话)
2015/12/07 职场文书
蓝牙耳机怎么连接电脑win11? Win11蓝牙耳机连接电脑的技巧
2023/01/09 数码科技