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

如何将两个DataFrame中的分类列进行映射匹配?

实现方案

关于映射关系的合理性

你定义的matching_cat是合理的,它清晰建立了父分类到子分类的对应关系,是处理这类分类匹配问题的常规方式,后续新增/修改分类直接调整字典即可,维护成本低。

具体实现步骤

1. 反转分类映射

先把matching_cat从父分类→子分类列表反转成子分类→父分类的字典,方便直接给df2的names值匹配对应分类:

# 生成子分类到父分类的映射字典
name_to_cat = {}
for cat, names_list in matching_cat.items():
    for name in names_list:
        name_to_cat[name] = cat

2. 给df2添加对应分类列

利用上面的映射,给df2新增分类列,用于后续和df1的categories做对比:

df2['matched_category'] = df2['names'].map(name_to_cat)

3. 基于key_col合并两个DataFrame

用pd.merge按共同的key_col合并,这里用内连接只保留两个DataFrame都存在的key;如果需要保留df1的所有行,可将how参数改为'left':

merged_df = pd.merge(df1, df2, on='key_col', how='inner')

4. 可选:添加匹配验证列

如果需要快速验证当前categories和names是否符合映射规则,新增一列标记匹配结果:

merged_df['is_match'] = merged_df['categories'] == merged_df['matched_category']

完整代码与运行结果

import pandas as pd

data1 = {'key_col': ['12563','12564','12565','12566'],
    'categories': ['bird', 'dog', 'insect','insect'],'column3': ['some','other','data','there']
}
df1 = pd.DataFrame(data1)

data2 = { 'key_col': ['12563','12564','12565','12566','12567'],
          'names': ['falcon', 'golden retriever', 'doberman','spider','spider'],
'column_randomn': ['some','data','here','here','here'] }
df2 = pd.DataFrame(data2)

matching_cat = {'bird':  ['falcon', 'toucan', 'eagle'],
            'dog': ['golden retriever', 'doberman'],
              'insect':['spider','mosquito'] }

# 反转映射
name_to_cat = {}
for cat, names in matching_cat.items():
    for name in names:
        name_to_cat[name] = cat

# 给df2添加分类列
df2['matched_category'] = df2['names'].map(name_to_cat)

# 合并DataFrame
merged_df = pd.merge(df1, df2, on='key_col', how='inner')

# 添加匹配验证列
merged_df['is_match'] = merged_df['categories'] == merged_df['matched_category']

print(merged_df)

运行输出:

key_col categories column3             names column_randomn matched_category  is_match
0   12563        bird    some            falcon           some             bird      True
1   12564         dog   other  golden retriever            data              dog      True
2   12565      insect    data         doberman            here              dog     False
3   12566      insect   there            spider            here           insect      True

结果中is_match列会直接标记该行的分类与子分类是否匹配,方便快速定位异常数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:05:28