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

在Pandas DataFrame中实现值范围映射的技术问询

解决方案:按区间映射生成新列

别担心,这种按区间批量映射的需求其实很常见,我给你两种简单好用的方法来实现:

方法1:使用pd.cut()(推荐)

pd.cut()是pandas专门为数值分箱设计的函数,完美匹配你的区间映射需求:

import pandas as pd
import numpy as np

# 生成示例DataFrame
df = pd.DataFrame(data=np.random.randint(1,10,10), columns=['a'])

# 定义区间边界和对应的映射值
bins = [0, 3, 7, 10]  # 划分出(0,3]、(3,7]、(7,10]三个区间
labels = [1, 2, 3]

# 生成新列b,include_lowest确保左边界被包含
df['b'] = pd.cut(df['a'], bins=bins, labels=labels, include_lowest=True)

参数说明:

  • bins:设置区间的分隔点,适配你需要的[1,3]、[4,7]、[8,10]三个范围
  • include_lowest=True:让第一个区间包含左边界值,保证a=1、2、3能被正确归类
  • labels:对应每个区间的映射结果

运行后你的DataFrame会变成类似这样:

a  b
0  7  2
1  8  3
2  8  3
3  3  1
4  1  1
5  1  1
6  2  1
7  8  3
8  6  2
9  6  2

方法2:使用np.select()(更直观的条件判断)

如果想要更直白地写出每个区间的判断规则,np.select()会是个不错的选择:

# 定义每个区间的判断条件
conditions = [
    df['a'].between(1, 3),
    df['a'].between(4, 7),
    df['a'].between(8, 10)
]
# 对应每个条件的映射结果
choices = [1, 2, 3]

# 生成新列b
df['b'] = np.select(conditions, choices)

这种方法的优势是条件逻辑一目了然,完全贴合你描述的规则,不需要考虑分箱的开闭边界问题。

两种方法都能完美实现你的需求,你可以根据自己的习惯选择~

内容的提问来源于stack exchange,提问作者E. Sommer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:40:59