利用pandas对数据离散化

在实际的工作场景中,我们经常会遇到这样一种场景:想要将某些字段进行离散化即分桶,简单来说就是讲年龄分成几个区间。pandas中的cut方法能很好地完成此操作。

#导入相关库,并创建数据集
import pandas as pd 
import numpy as np

index = pd.Index(data=["Tom", "Bob", "Mary", "James"], name="name")
data = {
    "age": [15, 28, 23, 37],
    "city": ["Hangzhou", "ShangHai", "Hefei", "Luan"],
    "sex": ["male", "female", "female", "male"]
}
user_info = pd.DataFrame(data=data, index=index)

In [48]:user_info
Out[48]: 
       age      city     sex
name                        
Tom     15  Hangzhou    male
Bob     28  ShangHai  female
Mary    23     Hefei  female
James   37      Luan    male

#将user_info中的age分成三个年龄段
pd.cut(user_info.age,3)

Out[51]: 
name
Tom      (14.978, 22.333]
Bob      (22.333, 29.667]
Mary     (22.333, 29.667]
James      (29.667, 37.0]
Name: age, dtype: category
Categories (3, interval[float64]): [(14.978, 22.333] < (22.333, 29.667] < (29.667, 37.0]]

从以上得到的结果可以看出,cut将年龄段进行了均等的切分。当然我们还可以进行自定义操作(此时可以对区间名称起别名):

#自定义区间并进行分割
qujian=[5,15,25,40]
pd.cut(user_info.age,qujian)

Out[55]: 
name
Tom       (5, 15]
Bob      (25, 40]
Mary     (15, 25]
James    (25, 40]
Name: age, dtype: category
Categories (3, interval[int64]): [(5, 15] < (15, 25] < (25, 40]]

#起别名
pd.cut(user_info.age,qujian,labels=['child','youth','middle'])
Out[56]: 
name
Tom       child
Bob      middle
Mary      youth
James    middle
Name: age, dtype: category
Categories (3, object): [child < youth < middle]

如果现在想求出每个区间出现male和female出现的次数,该如何操作呢?可以结合groupby函数来进行操作,如下:

#首先对user_info进行切割
pdd=pd.cut(user_info['age'],qujian)
user_info['age'].groupby(pdd).count()
Out[66]: 
age
(5, 15]     1
(15, 25]    1
(25, 40]    2
Name: age, dtype: int64

从上可以看出,实现age区间出现次数的统计。

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值