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

如何将DataFrame中的值与字典的键范围匹配并返回对应值?

匹配DataFrame数值与区间字典的高效方法

嘿,我来帮你搞定这个问题!你想把DataFrame里的数值和字典中的区间对应起来获取颜色,用循环迭代确实容易踩坑,而且pandas本身就有更简洁高效的向量化方法,完全不用手动遍历~

为什么你的循环可能不好用?

循环遍历DataFrame的每行数据不仅效率低(数据量大的时候特别明显),而且如果没处理好区间的边界判断,很容易出现匹配不到的情况。咱们换个更贴合pandas特性的方式来做。

推荐方法:用pd.cut()实现区间匹配

你的字典键是连续的数值区间,pd.cut()就是pandas专门用来处理这类区间划分的工具,完美适配你的需求。步骤如下:

  1. 从字典中提取区间的边界值和对应的颜色标签
  2. 用pd.cut()把DataFrame的数值映射到对应的颜色

完整代码示例:

import pandas as pd

colors = {range(0,50):"red",range(50,100):"blue", range(100,150):"green",range(150,200):"orange" ,range(200, 250):"purple", range(250,1000):"grey"}
df = pd.DataFrame(data=[51,8,265,167], columns=['A'])

# 提取区间的起始点,再加上最后一个区间的终点作为完整的边界列表
bins = [r.start for r in colors.keys()] + [list(colors.keys())[-1].stop]
# 提取对应的颜色标签
labels = list(colors.values())

# 执行区间匹配,include_lowest=True确保第一个区间包含起始值0
df['color'] = pd.cut(df['A'], bins=bins, labels=labels, include_lowest=True)

print(df)

运行后你会得到期望的结果:

A   color
0   51    blue
1    8     red
2  265    grey
3  167  orange

如果你想试试循环的写法(不推荐大数据量)

要是你好奇循环怎么写才能成功,也可以用apply()结合自定义函数来实现,不过这个方法在数据量大的时候效率会很低:

def get_matching_color(x):
    for interval, color in colors.items():
        if x in interval:
            return color
    # 处理不在任何区间的数值
    return None

df['color'] = df['A'].apply(get_matching_color)

小提示

  • pd.cut()的include_lowest=True非常重要,它能确保第一个区间(0-50)包含0这个起始值,不然0会被判定为不属于任何区间,返回NaN。
  • 你的区间是连续且不重叠的,刚好符合pd.cut()的使用场景,如果区间有重叠,可能需要调整逻辑优先匹配某个区间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:13:52