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

Pandas如何跨DataFrame映射值实现TagID到对应Genre转换

Pandas 跨DataFrame批量映射标签ID实现方案

核心思路

先把存储ID-映射值关系的表转成查询字典,再对待匹配表中按空格拼接的ID串做拆分、逐值匹配、拼接,就能得到需要的结果。字典查询时间复杂度为O(1),数据量大的时候性能远高于多表关联。

实现步骤

  • 构建ID到流派的映射字典
import pandas as pd

# 从映射关系表a生成查询字典
tag_to_genre = dict(zip(a['TagID'], a['Genre']))
  • 逐行处理待匹配表b的Tags字段
    b的Tags字段是空格分隔的多ID字符串,需要先拆分再匹配,最后拼接成要求的逗号分隔格式:
def match_genre(tag_str):
    # 拆分空格分隔的ID,统一转为整数类型匹配
    tag_id_list = [int(tid) for tid in tag_str.split()]
    # 逐个匹配对应流派,若存在未覆盖的ID可将tag_to_genre[tid]替换为tag_to_genre.get(tid, '默认流派')避免报错
    matched_genre = [tag_to_genre[tid] for tid in tag_id_list]
    # 拼接为逗号分隔的字符串
    return ', '.join(matched_genre)

# 生成结果列
output = b[['Tags']].copy()
output['Genre'] = output['Tags'].apply(match_genre)
# 提取最终需要的输出结构
final_result = output[['Genre']]

可选:无自定义函数实现方案

如果偏好纯Pandas内置方法,可以用explode拆分后关联再聚合的方式实现,逻辑更直观:

# 拆分ID并展开为多行
temp = b.assign(Tags=b['Tags'].str.split()).explode('Tags')
# 统一ID字段类型
temp['Tags'] = temp['Tags'].astype(int)
# 关联映射表
temp = temp.merge(a, left_on='Tags', right_on='TagID', how='left')
# 按原行索引聚合格式化为要求的字符串
final_result = temp.groupby(level=0)['Genre'].agg(lambda x: ', '.join(x.dropna())).to_frame('Genre')

注意:样例数据中a表仅包含TagID 0-4的映射,b表待匹配ID为154、20/35/40/65,只要实际a表包含这些ID的对应Genre值,运行上述代码就能直接得到预期结果结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:06:23