如何将Pandas的Age列数值按指定范围转换为字符串标签?
Pandas 年龄列高效分箱转换为标签
直接用Pandas的pd.cut()函数就能高效解决这个问题,完全不需要逐行迭代,还能避免类型匹配问题。具体步骤如下:
整理阈值与标签的顺序
先把你的ranges字典按阈值从小到大排序,确保分箱逻辑和你预期的一致:ranges = {'baby': 1, 'toddler': 6, 'kid': 12, 'teen': 21, 'adult': 80, 'old': 1000} # 按阈值升序排序,得到有序的标签和阈值对 sorted_ranges = sorted(ranges.items(), key=lambda x: x[1]) # 提取分箱边界和对应标签 bins = [-float('inf')] + [v for _, v in sorted_ranges] labels = [k for k, _ in sorted_ranges]执行分箱转换
用pd.cut()对Age列进行向量化分箱,指定right=False让区间左闭右开(比如[1,6)对应toddler,符合你“<6替换为toddler”的逻辑):import pandas as pd # 示例数据 df = pd.DataFrame({'Age': [2.0, 82.0, 15.0, 9.0, 25.0]}) # 生成标签列 df['Output Age'] = pd.cut(df['Age'], bins=bins, labels=labels, right=False)验证结果
运行后得到的DataFrame和你预期的一致:Age Output Age 2 toddler 82 old 15 teen 9 kid 25 adult
关键说明
pd.cut()是向量化操作,比循环迭代快几个数量级,尤其适合大数据集;right=False确保区间是左闭右开,完美匹配你“数值<阈值对应标签”的规则(比如<1是baby,1≤x<6是toddler);- 用
-float('inf')作为起始边界,确保所有0及以下的数值都能被分到baby标签里。
内容的提问来源于stack exchange,提问作者Theodore Psillos
相关产品推荐
相关产品推荐

