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

如何基于子串匹配关联DataFrame并获取对应分类信息?

模糊匹配并合并两张表的解决方案

方法一:矢量化正则匹配(高效推荐)

这种方法利用pandas的矢量化字符串操作,比循环更高效,适合大数据量场景:

import pandas as pd
import re

# 替换成实际数据读取逻辑,比如pd.read_csv
df_tags = pd.DataFrame({
    'key': ['biden says X', 'trump says Y', 'putin do something', 'The new iphone is great', 'whatever'],
    'value': [4,5,5,5,5]
})

df_categories = pd.DataFrame({
    'key': ['putin', 'trump', 'biden', 'phone'],
    'categorie': ['war', 'politics', 'politics', 'technology']
})

# 1. 构造正则模式,转义特殊字符避免匹配出错
category_keys = df_categories['key'].tolist()
pattern = '|'.join([re.escape(key) for key in category_keys])

# 2. 从Tags表的key中提取匹配的分类key(不区分大小写)
df_tags['CATEGORIES.KEY'] = df_tags['key'].str.extract(f'({pattern})', flags=re.IGNORECASE)

# 3. 左连接分类表,保留所有Tags行
result = df_tags.merge(
    df_categories,
    left_on='CATEGORIES.KEY',
    right_on='key',
    how='left',
    suffixes=('', '_cat')
)

# 4. 调整格式到目标结构
result['VALUE'] = result['CATEGORIES.KEY'].notna()
result['CATEGORIES.KEY'] = result['CATEGORIES.KEY'].fillna('false')
result = result.rename(columns={'key': 'TAGS.KEY', 'categorie': 'CATEGORIE'})
result = result[['TAGS.KEY', 'VALUE', 'CATEGORIES.KEY', 'CATEGORIE']]

print(result)

代码说明:

  • re.escape用于转义分类key中的特殊字符(如标点、括号),避免正则语法冲突。
  • str.extract会提取第一个匹配到的分类key,若需保留所有匹配可改用str.findall后再处理。
  • 左连接保证Tags表的所有行都被保留,未匹配的行分类字段自动为NaN。

方法二:循环匹配(适合小数据量)

数据量较小时,用循环匹配逻辑更直观:

import pandas as pd

# 构造数据同上,省略...

# 定义匹配函数:返回第一个匹配的分类信息,无匹配则返回指定值
def get_category(tag_key):
    for _, row in df_categories.iterrows():
        if row['key'].lower() in tag_key.lower():
            return row['key'], row['categorie']
    return 'false', None

# 应用函数到每个tag key
df_tags[['CATEGORIES.KEY', 'CATEGORIE']] = df_tags['key'].apply(
    lambda x: pd.Series(get_category(x))
)

# 调整格式
df_tags['VALUE'] = df_tags['CATEGORIES.KEY'] != 'false'
result = df_tags.rename(columns={'key': 'TAGS.KEY'})[['TAGS.KEY', 'VALUE', 'CATEGORIES.KEY', 'CATEGORIE']]

print(result)

注意事项:

  • 你提供的示例中trump says Y对应的CATEGORIES.KEY写为'biden'应为笔误,上述代码会正确匹配到'trump'并关联'politics'类别。
  • 若需处理一个tag匹配多个分类的场景,可修改逻辑将所有匹配结果用逗号分隔,或拆分为多行。

内容的提问来源于stack exchange,提问作者space data analysis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:01:01