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

如何使用Pandas实现匹配实体映射与缺失/空值实体处理

完整实现方案:Pandas实体映射与多行拆分处理

问题背景

需要处理包含实体信息的DataFrame,遵循以下规则:

  1. 若ent列的实体存在于ent_src列的实体集合中,将该实体映射为tgt_entity;若不存在则移除该行。
  2. 若ent列值为空,将ent_src列的所有实体拆分后分别赋值给tgt_entity,生成多行数据。

原始数据

import pandas as pd
data = pd.DataFrame({
    'id': [1, 1, 2, 2, 3],
    'ent_src': ['TrdA, TrdB,C, D']*5,
    'ent': ['TrdA', 'TrdB', 'TrdF', 'TrdXX', ''],
    'col': ['aaaa', 'bbbb', 'ccc', 'ZZZZ', 'ggg']
})

完整实现代码

import pandas as pd

# 原始数据
data = pd.DataFrame({
    'id': [1, 1, 2, 2, 3],
    'ent_src': ['TrdA, TrdB,C, D']*5,
    'ent': ['TrdA', 'TrdB', 'TrdF', 'TrdXX', ''],
    'col': ['aaaa', 'bbbb', 'ccc', 'ZZZZ', 'ggg']
})

# 预处理:拆分ent_src为实体集合并清理空格,同时清理ent列空格
data['ent_src_clean'] = data['ent_src'].str.split(',').apply(lambda x: [s.strip() for s in x])
data['ent_clean'] = data['ent'].str.strip()

# 处理规则1:ent不为空且存在于ent_src实体集合的行
case1 = data[data['ent_clean'] != ''].copy()
case1 = case1[case1.apply(lambda row: row['ent_clean'] in row['ent_src_clean'], axis=1)]
case1['tgt_entity'] = case1['ent_clean']

# 处理规则2:ent为空的行,拆分ent_src生成多行
case2 = data[data['ent_clean'] == ''].copy()
case2 = case2.assign(tgt_entity=case2['ent_src_clean']).explode('tgt_entity')

# 合并结果并调整列顺序
result = pd.concat([case1, case2], ignore_index=True)
result = result[['id', 'ent_src', 'ent', 'col', 'tgt_entity']]

# 输出最终结果
print(result)

代码逻辑说明

  • 预处理:清理实体字符串中的空格,避免因空格导致的匹配失败,同时将ent_src拆分为结构化的实体列表。
  • 规则1处理:先筛选ent非空的行,再校验实体是否存在于ent_src集合中,符合条件的直接映射实体到tgt_entity。
  • 规则2处理:筛选ent为空的行,通过assign绑定拆分后的实体列表,再用explode将列表拆分为多行数据。
  • 结果合并:将两种规则的处理结果合并,调整列顺序后得到符合要求的输出。

运行结果

id           ent_src   ent   col tgt_entity
0   1  TrdA, TrdB,C, D  TrdA  aaaa       TrdA
1   1  TrdA, TrdB,C, D  TrdB  bbbb       TrdB
2   3  TrdA, TrdB,C, D        ggg       TrdA
3   3  TrdA, TrdB,C, D        ggg       TrdB
4   3  TrdA, TrdB,C, D        ggg          C
5   3  TrdA, TrdB,C, D        ggg          D

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 10:38:33