网易首页 > 网易号 > 正文 申请入驻

Pandas 对数值进行分箱操作的4种方法总结对比

0
分享至

使用 Pandas 的between 、cut、qcut 和 value_count离散化数值变量

分箱是一种常见的数据预处理技术有时也被称为分桶或离散化,他可用于将连续数据的间隔分组到“箱”或“桶”中。 在本文中,我们将讨论使用 python Pandas 库对数值进行分箱的 4 种方法。

我们创建以下合成数据用于演示

import pandas as pd # version 1.3.5
import numpy as np
def create_df():
df = pd.DataFrame({'score': np.random.randint(0,101,1000)})
return df
create_df()
df.head()

数据包括 1000 名学生的 0 到 100 分的考试分数。 而这次的任务是将数字分数分为值“A”、“B”和“C”的等级,其中“A”是最好的等级,“C”是最差的等级。

1、between & loc

Pandas .between 方法返回一个包含 True 的布尔向量,用来对应的 Series 元素位于边界值 left 和 right[1] 之间。

参数有下面三个:

· left:左边界

· right:右边界

· inclusive:要包括哪个边界。 可接受的值为 {“both”、“neither”、“left”、“right”}。

根据以下间隔规则将学生的分数分为等级:

· A: (80, 100]

· B: (50, 80]

· C: [0, 50]

其中方括号 [ 和圆括号 ) 分别表示边界值是包含的和不包含的。我们需要确定哪个分数在感兴趣的区间之间,并为其分配相应的等级值。注意看下面的不同的参数表示是否包含边界

df.loc[df['score'].between(0, 50, 'both'), 'grade'] = 'C'
df.loc[df['score'].between(50, 80, 'right'), 'grade'] = 'B'
df.loc[df['score'].between(80, 100, 'right'), 'grade'] = 'A'

以下是每个分数区间的人数:

df.grade.value_counts()

此方法需要为每个 bin 编写处理的代码,因此它仅适用于 bin 很少的情况。

2、cut

可以使用 cut将值分类为离散的间隔。 此函数对于从连续变量到分类变量[2] 也很有用。

cut的参数如下:

· x:要分箱的数组。 必须是一维的。

· bins:标量序列:定义允许非均匀宽度的 bin 边缘。

· labels:指定返回的 bin 的标签。 必须与上面的 bins 参数长度相同。

· include_lowest: (bool) 第一个区间是否应该是左包含的。

bins = [0, 50, 80, 100]
labels = ['C', 'B', 'A']
df['grade'] = pd.cut(x = df['score'], bins = bins, labels = labels, include_lowest = True)

这样就创建一个包含 bin 边界值的 bins 列表和一个包含相应 bin 标签的标签列表。

查看每个区段的人数

df.grade.value_counts()

结果与上面示例相同。

3、qcut

qcut可以根据排名或基于样本分位数将变量离散为大小相等的桶[3]。

在前面的示例中,我们为每个级别定义了分数间隔,这回使每个级别的学生数量不均匀。在下面的示例中,我们将尝试将学生分类为 3 个具有相等(大约)数量的分数等级。示例中有 1000 名学生,因此每个分箱应该有大约 333 名学生。

qcut参数:

x:要分箱的输入数组。必须是一维的。

q:分位数。 10 表示十分位数,4 表示四分位数等。也可以是交替排列的分位数,例如[0, .25, .5, .75, 1.] 四分位数。

labels:指定 bin 的标签。必须与生成的 bin 长度相同。

retbins: (bool) 是否返回 (bins, labels)。

df['grade'], cut_bin = pd.qcut(df['score'], q = 3, labels = ['C', 'B', 'A'], retbins = True)
df.head()

如果 retbins 设置为 True 则会返回 bin 边界。

print (cut_bin)

>> [ 0. 36. 68. 100.]

分数间隔如下:

· C: [0, 36]

· B: (36, 68]

· A: (68, 100]

使用 .value_counts() 检查每个等级有多少学生。 理想情况下,每个箱应该有大约 333 名学生。

df.grade.value_counts()

4、value_counts

虽然 pandas .value_counts 通常用于计算系列中唯一值的数量,但它也可用于使用 bins 参数 [4] 将值分组到半开箱中。

df['score'].value_counts(bins = 3, sort = False)

默认情况下, .value_counts 按值的降序对返回的系列进行排序。 将 sort 设置为 False 以按其索引的升序对系列进行排序。

series 索引是指每个 bin 的区间范围,其中方括号 [ 和圆括号 ) 分别表示边界值是包含的和不包含的。 返回series 的值表示每个 bin 中有多少条记录。

与 .qcut 不同,每个 bin 中的记录数不一定相同(大约)。 .value_counts 不会将相同数量的记录分配到相同的类别中,而是根据最高和最低分数将分数范围分成 3 个相等的部分。 分数的最小值为 0,最大值为 100,因此这 3 个部分中的每一个都大约在 33.33 范围内。 这也解释了为什么 bin 的边界是 33.33 的倍数。

我们还可以通过传入边界列表来定义 bin 边界。

df['score'].value_counts(bins = [0,50,80,100], sort = False)

这给了我们与示例 1 和 2 相同的结果。

总结

在本文中,介绍了如何使用 .between、.cut、.qcut 和 .value_counts 对连续值进行分箱。这里是本文的源代码:

https://avoid.overfit.cn/post/dc11c84491e841dea928d652f0f93005

作者:Edwin Tan

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
原恒大“二把手”欲转移600亿港元资产 香港法院四次驳回!

原恒大“二把手”欲转移600亿港元资产 香港法院四次驳回!

经济观察报
2026-01-04 12:21:04
世体:瓦伦西亚女足B队主帅马丁的遗体已找到,其孩子仍失踪

世体:瓦伦西亚女足B队主帅马丁的遗体已找到,其孩子仍失踪

懂球帝
2026-01-04 18:06:12
能插存储卡、带耳机口、可拆后盖,刚公布这新机有点意思!

能插存储卡、带耳机口、可拆后盖,刚公布这新机有点意思!

刘奔跑
2026-01-03 14:26:40
要下课了?阿莫林公开反水,曼联两大继任者已就位

要下课了?阿莫林公开反水,曼联两大继任者已就位

澜归序
2026-01-05 05:32:47
抓捕委内瑞拉总统马杜罗,美国授权美国

抓捕委内瑞拉总统马杜罗,美国授权美国

新民晚报
2026-01-04 09:42:55
潍坊市教育局局长王霞已任区委书记

潍坊市教育局局长王霞已任区委书记

山东教育
2026-01-05 00:06:07
芯片天塌了。光刻机突然不金贵了。一条大新闻砸懵整个圈子。

芯片天塌了。光刻机突然不金贵了。一条大新闻砸懵整个圈子。

普陀动物世界
2026-01-04 12:02:53
盯上3000亿桶石油储量,特朗普:美国将“接管”委内瑞拉

盯上3000亿桶石油储量,特朗普:美国将“接管”委内瑞拉

时代周报
2026-01-04 08:49:26
塌房猝不及防!周奇站姐脱粉爆料,阳光人设彻底崩了?

塌房猝不及防!周奇站姐脱粉爆料,阳光人设彻底崩了?

完善法
2026-01-05 03:57:07
这和“真空”有啥区别,章子怡大胆穿衣,却没赢过保守的蒋勤勤

这和“真空”有啥区别,章子怡大胆穿衣,却没赢过保守的蒋勤勤

黄小仙的搞笑视频
2025-12-27 16:10:37
马杜罗被抓真相

马杜罗被抓真相

蓝钻故事
2026-01-04 04:34:25
49岁赵薇广东饭局近照疯传!瘦脱相显凶相,当年小燕子彻底凉透了

49岁赵薇广东饭局近照疯传!瘦脱相显凶相,当年小燕子彻底凉透了

阿纂看事
2025-12-12 09:18:29
你听过最劲爆的瓜是啥?网友:被大八岁的补习班老师表白了

你听过最劲爆的瓜是啥?网友:被大八岁的补习班老师表白了

带你感受人间冷暖
2025-11-26 00:10:06
6国宣布出兵!中方不低头也得低?扬言和中方斗到底!咱妈动真格

6国宣布出兵!中方不低头也得低?扬言和中方斗到底!咱妈动真格

瞳哥视界
2025-12-31 21:05:39
韩国第一夫人刚到北京就把人美到!穿宝蓝色大衣挽着李在明,真甜

韩国第一夫人刚到北京就把人美到!穿宝蓝色大衣挽着李在明,真甜

时尚丽人风行
2026-01-04 16:42:22
漯河通报4起违反中央八项规定精神典型问题

漯河通报4起违反中央八项规定精神典型问题

微看新闻
2026-01-04 08:53:48
教育部下了硬指令,私立幼儿园老板们慌了,估计吃安眠药都睡不着

教育部下了硬指令,私立幼儿园老板们慌了,估计吃安眠药都睡不着

今朝牛马
2026-01-02 21:04:49
落选秀单节21分坎宁安27+6+7,米切尔30分难救主,活塞复仇骑士

落选秀单节21分坎宁安27+6+7,米切尔30分难救主,活塞复仇骑士

钉钉陌上花开
2026-01-05 05:35:01
教育部扔下重磅炸弹:2026年开始,全国一律不准再买校外商业试卷

教育部扔下重磅炸弹:2026年开始,全国一律不准再买校外商业试卷

扶苏聊历史
2026-01-03 09:38:08
特朗普威胁委内瑞拉代总统:若不正确行事 将付出更惨痛代价

特朗普威胁委内瑞拉代总统:若不正确行事 将付出更惨痛代价

环球网资讯
2026-01-05 05:03:18
2026-01-05 07:00:49
deephub incentive-icons
deephub
CV NLP和数据挖掘知识
1880文章数 1440关注度
往期回顾 全部

科技要闻

雷军:骂小米汽车有流量,但别故意抹黑

头条要闻

拘押马杜罗的拘留中心"环境令人作呕" 内部画面披露

头条要闻

拘押马杜罗的拘留中心"环境令人作呕" 内部画面披露

体育要闻

女子世界第一,9年前在咖啡店洗碗

娱乐要闻

《小城大事》上星央八 热血筑梦正当时

财经要闻

李迅雷:扩内需必须把重心从"投"转向"消"

汽车要闻

最高续航310km 岚图泰山8或将上半年发布

态度原创

健康
家居
手机
教育
时尚

这些新疗法,让化疗不再那么痛苦

家居要闻

黑白碰撞 个性多元冷冽风

手机要闻

新的折叠屏iPhone Fold上手渲染图,独特的阔折叠形态!

教育要闻

中考成绩不如意?三步释怀法助你轻松翻篇!

这才是中年女人该有的打扮,不扮嫩、不穿花,简约大方还显贵

无障碍浏览 进入关怀版