如何在Python Pandas中基于DataFrame列值创建区间分组新列?
Pandas按自定义区间生成分组字符串列的实现方法
问题说明
现有如下Pandas DataFrame(col1为float类型):
col1 ------ 0.04 0.09 100.00 31.34 55.02 80.00
需要新增字符串类型列col2,将col1的值按以下自定义区间分组:
0-10 11-20 21-30 31-40 41-50 51-60 71-80 81-90 91-100
最终目标结果:
col1 | col2 -------|------ 0.04 | 0-10 0.09 | 0-10 100.00 | 91-100 31.34 | 31-40 55.02 | 51-60 80.00 | 71-80
实现代码
可以使用Pandas的pd.cut()方法完成分箱分组,步骤如下:
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({'col1': [0.04, 0.09, 100.00, 31.34, 55.02, 80.00]}) # 定义区间边界:遵循左开右闭规则,最后一个边界设为101以包含100.00 bins = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 101] # 定义与区间对应的标签,跳过无需求的61-70区间 labels = ['0-10', '11-20', '21-30', '31-40', '41-50', '51-60', '71-80', '81-90', '91-100'] # 执行分箱并生成col2,include_lowest=True确保左边界值被正确包含 df['col2'] = pd.cut(df['col1'], bins=bins, labels=labels, include_lowest=True) # 将category类型转换为string类型(按需选择) df['col2'] = df['col2'].astype(str) print(df)
关键说明
bins的设置:默认左开右闭,通过include_lowest=True让第一个区间包含左边界(0),确保0.04这类小值被分到0-10区间;最后一个边界设为101,保证100.00能被纳入91-100区间。- 无需求区间处理:由于需求跳过了
61-70区间,若后续数据出现该范围的值,col2会显示NaN,可根据实际业务补充对应处理逻辑。
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

