You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中正确实现年龄列的区间条件映射?

解决DataFrame年龄区间映射问题

你用map处理性别列可行,是因为map是基于元素精确匹配的键值映射——性别列的每个值('female'/'male'/'other')都能和字典的键完全对应。但年龄列是数值,你写的'25 < age < 36'是字符串条件,不是实际的年龄值,所以map无法识别匹配,自然失效。

下面是两种靠谱的实现方式:

方法一:用pd.cut(推荐,专门用于区间分箱)

pandas.cut是为数值区间分箱设计的工具,直接指定区间和对应标签即可:

import pandas as pd

# 定义区间边界,调整边界避免重叠,这里用左闭右开逻辑
bins = [25, 35, 45, 56]
labels = [1, 2, 3]

# include_lowest=True确保25<=age<=35被纳入第一个区间
df['age'] = pd.cut(df['age'], bins=bins, labels=labels, include_lowest=True)

如果要匹配你原本写的25 < age < 36这种左开右闭区间,可调整参数:

df['age'] = pd.cut(df['age'], bins=[25, 36, 46, 56], labels=[1,2,3], right=False)

方法二:自定义函数+apply

如果需要更灵活的条件逻辑,比如处理特殊边界值,可以写自定义函数,用apply逐行处理:

def map_age(age):
    if 25 < age < 36:
        return 1
    elif 35 < age < 46:
        return 2
    elif 45 < age < 56:
        return 3
    else:
        return None  # 处理不在目标区间内的情况

df['age'] = df['age'].apply(map_age)

注意:你写的区间存在重叠(比如35-36的数值会同时满足两个条件),建议调整边界避免歧义,比如把第一个区间改为25 < age <=35,第二个改为35 < age <=45。

方法三:用np.select(多条件映射)

适合多分支条件场景,逻辑清晰直观:

import numpy as np

conditions = [
    (df['age'] > 25) & (df['age'] < 36),
    (df['age'] > 35) & (df['age'] < 46),
    (df['age'] > 45) & (df['age'] < 56)
]
choices = [1, 2, 3]

df['age'] = np.select(conditions, choices, default=None)

内容的提问来源于stack exchange,提问作者user3892

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:24:55