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

如何在Pandas中对区间类型数据执行字典映射?

如何对Pandas分箱后的区间类型进行映射?

哈哈,这个问题我之前踩过坑!你遇到的问题本质是pd.cut生成的区间是Pandas的Interval对象,直接用手动写的区间当字典键会因为对象实例不匹配而映射失败,给你几个实用的解决办法:

方法一:分箱时直接指定标签(最省心)

既然我们最终要得到映射后的range字符串,完全可以在执行pd.cut的时候一步到位,不用后续再做映射操作:

import pandas as pd

d = {'col1':['a','c','b','q','w','f','h','v','t','y'], 'col2':[1,3,33,7,5,8,2,3,5,0]}
df= pd.DataFrame(d)

# 定义分箱边界和对应的range标签
bins = [-0.001, 2.25, 4, 6.5, 33]
range_labels = ["range 1", "range 2", "range 3", "range 4"]

# 生成区间列col3
df['col3'] = pd.cut(x=df['col2'], bins=bins)
# 直接生成映射后的col4
df['col4'] = pd.cut(x=df['col2'], bins=bins, labels=range_labels)

这样处理后,col3保留原始区间,col4直接得到我们想要的字符串,全程不用处理字典匹配问题。

方法二:将区间转为字符串后映射

如果已经生成了col3列,不想重新执行分箱,可以把Interval对象转成字符串,再用字符串作为字典键进行映射:

# 定义键为区间的字符串表示的字典
di = {
    "(-0.001, 2.25]": "range 1",
    "(2.25, 4.0]": "range 2",
    "(4.0, 6.5]": "range 3",
    "(6.5, 33.0]": "range 4"
}

# 把col3转为字符串后再映射
df['col4'] = df['col3'].astype(str).map(di)

这个方法的核心是利用Interval对象的字符串表示和我们手动写的格式完全一致,转成字符串后就能和字典键完美匹配。

方法三:利用Categorical的codes属性自动映射

pd.cut生成的区间列是Categorical类型,自带一个codes属性,每个区间会被分配一个从0开始的整数编码。我们可以利用这个编码直接生成对应的range字符串,连字典都不用写:

# 利用codes属性,编码+1就是range的数字
df['col4'] = df['col3'].cat.codes.apply(lambda x: f"range {x+1}")

这个方法尤其适合分箱区间很多的场景,不用手动维护庞大的映射字典,非常高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:52:31