如何在Pandas中基于字符串条件创建新列并合并行业分类?
行业类别合并方案对比与推荐
针对你需要合并30余种行业类别的需求,下面对比三种方法的优劣,并给出最优方案:
不推荐:if/else嵌套
如果用apply配合多层if/else判断,代码会随着行业类型增多变得极度冗长,可读性和维护性极差。比如:
def categorize_industry(x): if x in ["finance", "crypto"]: return "financial" elif x in ["travel", "fitness", "retail"]: return "consumer" # 30余种类型会堆一堆elif分支 else: return x df["new_industry"] = df["industry"].apply(categorize_industry)
这种方式后期修改或新增类别时,要在函数里逐个调整判断逻辑,效率极低。
可选:loc函数
用Pandas的loc可以实现批量赋值,适合少量合并规则的场景:
# 先默认保留原行业类别 df["new_industry"] = df["industry"] # 批量更新金融类 df.loc[df["industry"].isin(["finance", "crypto"]), "new_industry"] = "financial" # 批量更新消费类 df.loc[df["industry"].isin(["travel", "fitness", "retail"]), "new_industry"] = "consumer" # 每个新类别都要单独写一行赋值语句
但如果有大量合并规则,会产生大量重复的loc代码,不够简洁。
推荐:字典映射(最优方案)
将合并规则集中在一个字典里,代码简洁、可读性强,且后期维护只需修改字典即可,完美适配30余种行业的场景:
import pandas as pd # 示例数据 df = pd.DataFrame({ "industry": ["finance", "crypto", "travel", "fitness", "retail", "tech", "education"] }) # 定义映射规则:原行业 → 新类别 industry_map = { "finance": "financial", "crypto": "financial", "travel": "consumer", "fitness": "consumer", "retail": "consumer" # 其他需要合并的行业继续添加到字典中 } # 生成新列:匹配到字典的用新类别,未匹配的保留原行业(或设为'other') # 保留原行业 df["new_industry"] = df["industry"].map(lambda x: industry_map.get(x, x)) # 未匹配的归为'other',则替换为:industry_map.get(x, "other")
优势:
- 规则集中管理,一目了然,新增/修改类别只需调整字典
- 代码量极少,执行效率高(
map是Pandas的向量化操作,比apply更快) - 扩展性极强,无论多少种行业类型都能轻松适配
内容的提问来源于stack exchange,提问作者Jim-Sotelo
相关产品推荐
相关产品推荐

