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就会变成这样:
| String | New Column | |
|---|---|---|
| 0 | Red apple | Fruit |
| 1 | Fried chicken | Meat |
| 2 | Green banana | None |
| 3 | Grilled beef | None |
要是你需要严格区分大小写,只需要把case=False去掉就行,是不是很简单?
内容的提问来源于stack exchange,提问作者Andreas Kaineder
相关产品推荐
相关产品推荐

