用pandas将数据划分区间

在数据分析的过程中,经常会遇到:年龄,收入,价格以及类似的数据,在数据分析前,需要将这些数据划分到一系列区间中,再将区间进行不同的编码,对编码后的数据进行分析。

在pandas中可以使用pandas.cut()方法实现对数据的区间划分,以及对区间进行标记。

案例数据

  • 以name,age,score为例,使用pandas.cut()方法对age、score进行区间划分。
import pandas as pd
import numpy as npdf = pd.DataFrame(data={"name":["A","B","C","D","E","F","G","H","I","J"],"age":[23,26,37,46,85,12,53,80,66,32],"score":[13,23,22,76,56,89,99,100,10,54],
})

数据形式展示:

name age score
0 A 23 13
1 B 26 23
2 C 37 22
3 D 46 76
4 E 85 56
5 F 12 89
6 G 53 99
7 H 80 100
8 I 66 10
9 J 32 54

pandas.cut()介绍

用来将数据划分为不同的区间

  • x:array型数据(DataFrame的每一列数据都是array型数据)
  • bins:传入int型数据,表示划分的区间个数,传入list型数据,表示自定义的区间
  • labels:传入与bins对应区间的标签list型数据(默认为None)
  • retbins:True表示返回划分的区间,False表示不返回划分的区间(默认为False)
  • right:True表示左开右闭,False表示左闭右开(默认为True)

返回数据:

  • x对应所在的区间,array类型
  • retbins为True时,还会返回划分区间

一、自动划分区间

例如:bins=3,right=True,pandas会将数据划分为3个区间,划分方法,
(max-(max-min)/bins,max]>(60.667,85]
(max-(max-min)/bins*2,max-(max-min)/bins]>(36.333.60.667]
(max-(max-min)/bins*3,max-(max-min)/bins*2]==>(11.927, 36.333]

a,b = pd.cut(x=df["age"],bins=3,right=True,retbins=True)
# a,bins传入的是int类型,自动生成的区间
0    (11.927, 36.333]
1    (11.927, 36.333]
2    (36.333, 60.667]
3    (36.333, 60.667]
4      (60.667, 85.0]
5    (11.927, 36.333]
6    (36.333, 60.667]
7      (60.667, 85.0]
8      (60.667, 85.0]
9    (11.927, 36.333]
Name: age, dtype: category
Categories (3, interval[float64]): [(11.927, 36.333] < (36.333, 60.667] < (60.667, 85.0]]# b,自动划分的区间
array([11.927, 36.333, 60.667, 85.0])

二、自定义划分区间

eg:自定义一个年龄分段列表,age_bins = [10,20,30,50,70,80,90]

对应的区间为:[(10, 20] < (20, 30] < (30, 50] < (50, 70] < (70, 80] < (80, 90]]

这样pandas会按照age_bins指定的区间进行划分

age_bins = [10,20,30,50,70,80,90]
a,b = pd.cut(x=df["age"],bins=age_bins,right=True,retbins=True)

a和b的值:

# a返回的数据区间array对象
0    (20, 30]
1    (20, 30]
2    (30, 50]
3    (30, 50]
4    (80, 90]
5    (10, 20]
6    (50, 70]
7    (70, 80]
8    (50, 70]
9    (30, 50]
Name: age, dtype: category
Categories (6, interval[int64]): [(10, 20] < (20, 30] < (30, 50] < (50, 70] < (70, 80] < (80, 90]]# b数据区间retbins=True
array([10, 20, 30, 50, 70, 80, 90])

三、区间左边是否包含

使用场景:当age为80的时候,应该归为(70,80]还是[80,90),这是个问题

eg:bins = [10,20,30,50,70,80,90],right=True

对应的区间为:[(10, 20] < (20, 30] < (30, 50] < (50, 70] < (70, 80] < (80, 90]]

pd.cut(x=df.age,bins=age_bins,retbins=True,right=True)(0    (20, 30]1    (20, 30]2    (30, 50]3    (30, 50]4    (80, 90]5    (10, 20]6    (50, 70]7    (70, 80]8    (50, 70]9    (30, 50]Name: age, dtype: categoryCategories (6, interval[int64]): [(10, 20] < (20, 30] < (30, 50] < (50, 70] < (70, 80] < (80, 90]],array([10, 20, 30, 50, 70, 80, 90]))

bins = [10,20,30,50,70,80,90],right=False

对应的区间为:[[10, 20) < [20, 30) < [30, 50) < [50, 70) < [70, 80) < [80, 90)]

pd.cut(x=df.age,bins=age_bins,retbins=True,right=False)(0    [20, 30)1    [20, 30)2    [30, 50)3    [30, 50)4    [80, 90)5    [10, 20)6    [50, 70)7    [80, 90)8    [50, 70)9    [30, 50)Name: age, dtype: categoryCategories (6, interval[int64]): [[10, 20) < [20, 30) < [30, 50) < [50, 70) < [70, 80) < [80, 90)],array([10, 20, 30, 50, 70, 80, 90]))

四、区间加上标签

使用labels参数可以对区间加上标签,例如score列,小于60为不及格,60-80良好,80以上优秀

eg:bins:[0,60,80,100],labels:[“不及格”,“良好”,“优秀”]

返回的是对应的标签,而不是对应的区间

pd.cut(x=df.score,bins=[0,60,80,100],labels=["不及格","良好","优秀"])

代码运行结果:

0    不及格
1    不及格
2    不及格
3     良好
4    不及格
5     优秀
6     优秀
7     优秀
8    不及格
9    不及格
Name: score, dtype: category
Categories (3, object): ['不及格' < '良好' < '优秀']

给数据加上区间和标签

df["age_range"] = pd.cut(x=df["age"],bins=[10, 20, 30, 50, 70, 80, 90])
df["score_label"] = pd.cut(x=df["score"],bins=[0,60,80,100],labels=["不及格","良好","优秀"])

代码运行结果:

name age score age_range score_label
0 A 23 13 (20, 30] 不及格
1 B 26 23 (20, 30] 不及格
2 C 37 22 (30, 50] 不及格
3 D 46 76 (30, 50] 良好
4 E 85 56 (80, 90] 不及格
5 F 12 89 (10, 20] 优秀
6 G 53 99 (50, 70] 优秀
7 H 80 100 (70, 80] 优秀
8 I 66 10 (50, 70] 不及格
9 J 32 54 (30, 50] 不及格

更多好玩的内容,欢迎关注微信公众号《帅帅的Python》

pandas数据划分区间相关推荐

  1. python 区间频数统计_pandas分区间,算频率的实例

    如下所示: import pandas as pd path='F:/python/python数据分析与挖掘实战/图书配套数据.代码/chapter3/demo/data/catering_fish ...

  2. 是Excel的图,不!是R的图

    原文章来源链接:https://brucezhaor.github.io/blog/2016/06/13/excel2ggplot/ 原文章作者:BruceZhaoR(RStats, interest ...

  3. 深度粗排模型的GMV优化实践:基于全空间-子空间联合建模的蒸馏校准模型

    随着业务的不断发展,粗排模型在整个系统链路中变得越来越重要,能够显著提升线上效果.本文是对粗排模型优化的阶段性总结. 背景 在搜索.推荐.广告等大规模信息检索场景中,通常会将检索分为召回.粗排.精排三 ...

  4. 大数据中位数怎么运算_大数据查找中位数

    前两天同学面试遇到的一道题,大数据怎么找出中位数.大数据 --> 所有数据不能一下子读入内存 中位数 --> 需要遍历所有数据 1. 题目 在一个大文件中有100亿个32位整数,乱序排列, ...

  5. 计算个人所得税最佳纳税额(以2019最新税法规则计算)

    计算个人所得税最佳节税 年底了,2019年也参加了CPA税法的考试,闲来无事给大家分享一个昨天刚写的计算个人所得税的小程序.新鲜出炉,整个程序主要是基于2019年最新的个人所得税纳税规则计算最佳节税点 ...

  6. 利用pandas对一列/多列进行数据区间筛选

    前言 如果不整活,那就是浪费生命 下面这个表,如果你想筛选出age大于等于18,小于等于30的行: 如果在mysql中整这种活很容易,用个where就可以了 在pandas中也有相当于where作用的 ...

  7. 用pandas实现固定区间的数据频数统计(pd.cut,pd.Series)

    搜罗了一圈,终于找到了能够实现目的的代码 目标:对一组序列进行频数的统计,画出来就像hist,不过我要的是每个bin和对应的数据而不是图,而生成固定区间,我好进行后面的比值对比 首先具有数据分类功能的 ...

  8. numpy pandas 查找在一个区间中的值

    import numpy as npa = np.random.randint(0,10,50)# 查找小于5,大于7的数据 a[(a > 5) & (a < 7)] # 返回 [ ...

  9. pandas按半小时区间分组统计

    data.groupby(['col',data.START_HOUR.dt.floor('30Min')]).size().reset_index() 需要先将START_HOUR 采用pd.to_ ...

最新文章

  1. python移除系统多余大文件
  2. nopcommerce商城系统--源代码结构和架构
  3. 倍福嵌入式控制器PLC各型号简介
  4. LeetCode 1551. 使数组中所有元素相等的最小操作数(等差数列)
  5. [原]ASP.Net常用功能整理--生成图片的缩略图
  6. JAVA实现1到100的平方根之和_手算平方根和基于 Java BigInteger 的大整数平方根的实现...
  7. 计算机三级上机考试题库,计算机三级数据库上机试题及答案
  8. K210系列开发板介绍
  9. WPF XamlObjectWriterException:无法创建未知类型Grid
  10. 十.jmeter性能测试基础实践(2)
  11. python金融股票市场数据分析神器TA-Lib学习使用
  12. 吊打面试官之redis篇:一文全懂redis
  13. 遇到NOD32更新时提示“用户名和密码无效”解决办法
  14. 网络工程师考试知识点总结
  15. 超平面与半空间Euclid 球和椭球 超平面分离定理和 支撑超平面定理
  16. 理想边界尺寸怎么算_GDamp;T 几何尺寸和公差 | ASME14.52018标准弄错了吗?
  17. Ae 效果快速参考:杂色和颗粒
  18. RockChip Android平台抓取android trace的windows环境搭建
  19. android项目实战博学谷百度云,Android项目实战系列—基于博学谷(七)课程模块(下)...
  20. 这个社会穷人的出路在哪里?

热门文章

  1. 软件工程大作业(3)
  2. 区块链毕设源码开题论文-基于区块链的餐厅管理系统
  3. ant-design-vue切换主题+换肤+自定义换肤+less动态换肤
  4. 将oracle 转换 bak格式,MSSQL数据库文件MS.BAK转换为ORACLE数据库文件OR.dmp
  5. Android ExpandableList
  6. 脑电参考之零参考技术
  7. 计算机网络之交换机的工作原理---超详细解析,谁都看得懂!!
  8. python录制视频和声音_Python实现播放和录制声音的功能
  9. wps 字体对系统无效_“字体”侵权,你是否也中招?
  10. 算法 | 盖尔-沙普利(Gale-Shapley)婚姻稳定匹配算法