如何按指定区间对100-200的数值进行分箱(含200)?
解决pd.cut自定义含闭尾区间的分箱问题
方法1:调整bins上限+重命名区间标签
通过将最后一个bins边界设为略大于200的数值,确保200被包含在区间内,再手动修改区间标签为目标格式:
import pandas as pd import numpy as np # 生成100到200的测试数据 data = pd.Series(np.arange(100, 201)) # 设置bins,最后一个值设为200.1,保证200被纳入区间 bins = [100, 135, 160, 175, 190, 200.1] # 左闭右开规则分箱 cut_result = pd.cut(data, bins=bins, right=False) # 替换区间标签,修正最后一个区间的显示 cut_result.cat.categories = ['[100, 135)', '[135, 160)', '[160, 175)', '[175, 190)', '[190, 200]'] # 验证结果 print(cut_result.unique())
方法2:用IntervalIndex手动定义区间
直接创建包含指定开闭规则的区间索引,精确控制每个区间的开闭属性:
import pandas as pd import numpy as np from pandas.api.types import IntervalIndex # 手动定义区间:前四个左闭右开,最后一个为闭区间 intervals = IntervalIndex.from_tuples( [(100, 135), (135, 160), (160, 175), (175, 190), (190, 200)], closed=['left', 'left', 'left', 'left', 'both'] ) # 测试数据 data = pd.Series(np.arange(100, 201)) # 使用自定义区间分箱 cut_result = pd.cut(data, bins=intervals) # 验证结果 print(cut_result.unique())
两种方法均能实现需求:200会被正确分到[190, 200]区间,且显示的区间标签符合要求。方法1更简洁,方法2适合需要精细化控制区间规则的场景。
内容的提问来源于stack exchange,提问作者olesatthewheel
相关产品推荐
相关产品推荐

