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

Python Pandas:如何根据列中是否含字典键给新列赋值

嘿,这问题我熟!咱们直接上解决方案,分两种情况给你说,按需选就行~

首先先搭好咱们的示例数据,方便你直接测试:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'String': ['Red apple', 'Fried chicken', 'Green banana', 'Grilled beef']
})
# 你的匹配字典
category_map = {'Apple': 'Fruit', 'Chicken': 'Meat'}

方法一:直观的自定义函数(适合小数据集)

写个简单的函数,每一行遍历字典里的键,检查字符串里是否包含(还处理了大小写问题,毕竟你示例里是小写的apple对应大写的Apple):

def assign_category(row):
    for item, category in category_map.items():
        # 忽略大小写匹配,要是需要严格匹配就去掉.lower()
        if item.lower() in row['String'].lower():
            return category
    # 没有匹配到就返回None,你也可以改成空字符串或者其他默认值
    return None

df['New Column'] = df.apply(assign_category, axis=1)

方法二:高效的向量化操作(适合大数据量)

如果你的DataFrame行数很多,用apply可能有点慢,试试np.select,它是向量化操作,速度快很多:

import numpy as np

# 先构建每个键对应的匹配条件
match_conditions = [df['String'].str.contains(key, case=False) for key in category_map.keys()]
# 对应每个条件的分类值
category_values = list(category_map.values())

# 给新列赋值,没匹配到的用None填充
df['New Column'] = np.select(match_conditions, category_values, default=None)

最终结果

运行完上面任意一种方法,你的DataFrame就会变成这样:

StringNew Column
0Red appleFruit
1Fried chickenMeat
2Green bananaNone
3Grilled beefNone

要是你需要严格区分大小写,只需要把case=False去掉就行,是不是很简单?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:23:41