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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:05:17