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

如何使用dictionary与isin()为DataFrame生成匹配字典值的分类列?

解决方案:用字典结合isin()给DataFrame新增分类列

嘿,这个需求很常见,用isin()配合numpy.select就能完美解决,我给你一步步说明怎么做:

1. 先准备好你的数据

首先确保字典和DataFrame的定义正确,注意Value列的类型要和字典里的值类型一致(这里都是字符串):

import pandas as pd
import numpy as np

# 你的原始字典
d = {'Car':['1','2','3'], 
     'Chicken legs':['4','5','6'], 
     'Coronary artery bypass graft surgery':['7','8','9','10','11','12']}

# 你的原始DataFrame
df = pd.DataFrame({
    'Color': ['red', 'blue', 'green', 'orange'],
    'Style': ['round', 'square', 'triangle', 'sphere'],
    'Value': ['1', '5', '9', '12']
})

2. 用isin()构建匹配条件+新增列

核心思路是:为字典的每个Key生成一个布尔条件(判断Value是否在对应的值列表里),然后用np.select把匹配的Key赋值给新列:

# 生成条件列表:每个元素是一个布尔数组,标记该行Value是否属于对应字典值列表
conditions = [df['Value'].isin(vals) for vals in d.values()]

# 生成对应的分类值(就是字典的Key)
choices = list(d.keys())

# 新增Thing列:根据第一个满足的条件匹配对应Key,无匹配则设为None
df['Thing'] = np.select(conditions, choices, default=None)

3. 最终结果

运行完上面的代码后,你的DataFrame会变成这样:

ColorStyleValueThing
redround1Car
bluesquare5Chicken legs
greentriangle9Coronary artery bypass graft surgery
orangesphere12Coronary artery bypass graft surgery

几个注意点

  • 类型一致性:如果你的df['Value']是数字类型,记得把字典里的值也改成数字(比如['1','2']改成[1,2]),否则isin()会匹配失败。
  • 重复匹配处理:如果某个Value同时出现在多个字典值列表里,np.select会优先选择第一个匹配的Key(Python 3.7+的字典是有序的,所以顺序和你定义字典时一致)。
  • 默认值:如果有Value不在任何字典值列表里,default参数可以设置你想要的默认值(比如'Unknown')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:25:33