如何基于子串匹配关联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
相关产品推荐
相关产品推荐

