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

如何检测Table 1的A列是否包含Table 2的A列值并返回对应B列数据?

需求实现方案建议

需求概述

检测Table 1的A列文本中是否包含Table 2的A列值,若匹配成功,则在Table 1新增B列并填入Table 2对应匹配行的B列值;无匹配则留空。

参考数据

Table 2(匹配映射表)

AB
Y01102
Y06103
Y02105
Y08110
Y0545106

目标输出Table 1

AB
dhjasd sd Y02sd105
Y02 dsd105
sds Y0545 dsas dds106
Y093 sad
sd Y304sd

实现方案

1. Excel/Google Sheets 公式实现

在Table 1的B2单元格输入以下公式,下拉填充即可:

=XLOOKUP(TRUE, ISNUMBER(SEARCH(Table2!$A$2:$A$6, A2)), Table2!$B$2:$B$6, "")
  • 原理:SEARCH检测Table1的A列文本是否包含Table2的A列值,返回位置;ISNUMBER将结果转换为布尔值;XLOOKUP匹配第一个符合条件的Table2的B列值,无匹配则返回空。
  • 注意:若需精确完整匹配而非包含,将SEARCH替换为EXACT即可。

2. Python Pandas 实现

适合处理大规模数据,基础代码示例:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({
    'A': ['dhjasd sd Y02sd', 'Y02 dsd', 'sds Y0545 dsas dds', 'Y093 sad', 'sd Y304sd']
})
df2 = pd.DataFrame({
    'A': ['Y01', 'Y06', 'Y02', 'Y08', 'Y0545'],
    'B': [102, 103, 105, 110, 106]
})

# 定义匹配逻辑函数
def get_matched_b(row):
    for _, match_row in df2.iterrows():
        if match_row['A'] in row['A']:
            return match_row['B']
    return None

# 新增B列
df1['B'] = df1.apply(get_matched_b, axis=1)

# 查看结果
print(df1)
  • 大数据量优化方案:改用正则批量匹配提升效率
# 生成匹配正则表达式
df2['pattern'] = df2['A'].apply(lambda x: f'(?:{x})')
combined_pattern = '|'.join(df2['pattern'])

# 提取匹配的关键词并关联映射值
matches = df1['A'].str.extract(f'({combined_pattern})', expand=False)
df1 = df1.merge(df2, left_on=matches, right_on='A', how='left').drop(columns=['A_y', 'pattern']).rename(columns={'A_x': 'A'})

3. SQL 实现

以MySQL为例,通过LIKE关联查询实现:

SELECT 
    t1.A,
    t2.B
FROM 
    Table1 t1
LEFT JOIN 
    Table2 t2 ON t1.A LIKE CONCAT('%', t2.A, '%')
ORDER BY 
    t1.A;
  • 说明:LEFT JOIN保证Table1的所有行都被保留,匹配成功则显示Table2的B值,无匹配则为NULL;若需仅保留第一个匹配结果,可结合GROUP BY t1.A和MAX(t2.B)(或MIN,按需选择)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:13:11