用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. 当RxJava遇到AOP
  2. mysql建表影响效率_MySQL建表查询优化技巧
  3. 深入浅出mfc随笔——MFc程序的生死因果
  4. Android Svn 中 Bin ,Gen 目录不进行版本控制
  5. BundlePhobia
  6. 前端学习(2154):webpack横幅plugin的使用
  7. 纯数学教程 Page 325 例LXVIII (15) 调和级数发散
  8. Eclipse-报错:Could not create the Java virtual machine
  9. 一篇文章弄懂 JavaScript 中的 import
  10. hadoop中遇到的问题
  11. 网络安全——终端安全
  12. Linux学习简单教程和常用命令(小白学习法)
  13. 2021齐齐哈尔实验中学高考成绩查询,齐齐哈尔名列前茅的4所高中,成绩一目了然,谁是市内最强中学?...
  14. ioi2020集训队作业_IOI2020集训队作业
  15. 用python画星空-用python画星空源代码是什么?
  16. VSCode中将LaTeX的PDF阅读器设置为暗色
  17. eventBus VSvueX
  18. Android 鼠标样式修改
  19. Chomsky文法分类
  20. BERT模型—7.BERT模型在句子分类任务上的微调(对抗训练)

热门文章

  1. 2022-2-9 计算机组成原理 —— SIMD 和 超线程
  2. 2022-1-21 Leetcode.645.错误的集合
  3. 简单的ExpandableList控件例子
  4. php实现删除数据库中内容,php – 从数据库中删除内容,安全预防措施
  5. docker运行mysql性能_使用docker运行mysql
  6. php多图片生成flash,PHP_为php4加入动态flash文件的生成的支持,想象过在网站上动态生成flash - phpStudy...
  7. html5 桌面提醒参数,html5 桌面提醒:Notifycations应用介绍
  8. 游戏AI的缘起与进化
  9. em模型补缺失值_ML4fun系列(六):EM算法
  10. eclipse 下载 sdk