如何用 pandas 实现自定义边界(含右闭区间)的数值分箱

来源:建站作者:北京SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何用 pandas 实现自定义边界(含右闭区间)的数值分箱》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用 pandas 实现自定义边界(含右闭区间)的数值分箱》有用,将其分享出去将是对创作者最好的鼓励。

数值分箱可以将连续的数值特征转换为离散的区间特征,在数据分析、特征工程等场景中应用广泛。当我们需要按照自己设定的边界划分区间,并且要求每个区间都是右闭区间时,pandas的cut函数是最直接的实现工具。

如何用 pandas 实现自定义边界(含右闭区间)的数值分箱

核心参数说明

pandas的cut函数用于将数据按照指定的边界进行分箱,实现自定义边界且右闭区间的核心参数如下:

  • bins:传入自定义的边界列表,列表长度需要比最终分箱数量多1,第一个元素为最小边界,最后一个元素为最大边界
  • right:布尔类型参数,默认为True,表示区间为右闭区间,设置为False则为右开区间,实现右闭区间时保持默认值即可
  • labels:可选参数,用于给每个分箱区间设置自定义标签,不设置时默认返回区间对象
  • include_lowest:布尔类型参数,默认为False,设置为True时可以让第一个区间包含最小值,避免最小值被划分为NaN

基础实现示例

假设我们有一组学生的考试成绩数据,需要按照[0, 60, 80, 100]的边界进行分箱,要求区间为右闭区间,即0-60(包含60)、60-80(包含80)、80-100(包含100),具体实现代码如下:

import pandas as pd
import numpy as np

# 构造测试数据
scores = pd.Series([55, 62, 78, 85, 92, 58, 60, 80, 100, 45])
# 自定义分箱边界
bin_edges = [0, 60, 80, 100]
# 执行分箱操作,right=True保证右闭区间,include_lowest=True包含最小值
binned_result = pd.cut(scores, bins=bin_edges, right=True, include_lowest=True)
print("原始成绩数据:")
print(scores)
print("n分箱结果:")
print(binned_result)
print("n分箱统计:")
print(binned_result.value_counts().sort_index())

上述代码的输出结果中,每个区间都符合右闭规则,比如60会被划分到(0, 60]区间,80会被划分到(60, 80]区间,100会被划分到(80, 100]区间,最小值0也会被包含在第一个区间内。

自定义区间标签

如果希望分箱结果不是返回区间对象,而是自定义的类别标签,可以通过labels参数实现,比如将成绩分箱结果标记为不及格、良好、优秀:

import pandas as pd

scores = pd.Series([55, 62, 78, 85, 92, 58, 60, 80, 100, 45])
bin_edges = [0, 60, 80, 100]
# 自定义标签列表,长度需要和分箱数量一致
bin_labels = ["不及格", "良好", "优秀"]
# 带自定义标签的分箱
labeled_result = pd.cut(scores, bins=bin_edges, right=True, include_lowest=True, labels=bin_labels)
print("带标签的分箱结果:")
print(labeled_result)
print("n标签统计:")
print(labeled_result.value_counts().sort_index())

注意事项

在使用自定义边界进行右闭区间分箱时,需要注意以下几点:

  • 自定义边界列表必须是升序排列的,否则会抛出错误
  • 如果数据中存在超出边界范围的值,会被划分为NaN,需要提前确认边界是否覆盖所有数据范围
  • right=Trueinclude_lowest=False时,最小值如果等于第一个边界值,会被划分为NaN,因此处理包含边界值的场景时建议开启include_lowest参数
  • 如果需要将分箱结果转换为哑变量,可以在分箱结果后使用pd.get_dummies函数实现

分箱结果转哑变量示例

如果需要将分箱后的类别特征转换为模型可用的哑变量特征,可以参考以下代码:

import pandas as pd

scores = pd.Series([55, 62, 78, 85, 92, 58, 60, 80, 100, 45])
bin_edges = [0, 60, 80, 100]
bin_labels = ["不及格", "良好", "优秀"]
labeled_result = pd.cut(scores, bins=bin_edges, right=True, include_lowest=True, labels=bin_labels)
# 转换为哑变量
dummy_features = pd.get_dummies(labeled_result, prefix="score")
print("哑变量特征:")
print(dummy_features)

pandas数值分箱右闭区间自定义边界custom_binning修改时间:2026-07-21 11:39:22

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。