如何将DataFrame中的姓名与匹配到的段落ID关联?
解决方法
可以通过遍历eldf中的姓名,在dfrule中筛选出包含对应姓名的段落并提取ID,最终将姓名与段落ID关联生成目标结果。
通用实现(支持一个姓名对应多个段落ID)
import pandas as pd # 初始化结果存储列表 match_results = [] # 遍历eldf的每一条姓名记录 for _, name in eldf['Name'].items(): # 筛选dfrule中包含当前姓名的段落,提取对应的id matched_ids = dfrule[dfrule['Paragraphs'].str.contains(name, na=False)]['id'].tolist() # 若存在匹配,将姓名与每个ID一一对应存入结果 if matched_ids: for pid in matched_ids: match_results.append({'Name': name, 'Paragraph id': pid}) # 转换为目标DataFrame result_df = pd.DataFrame(match_results)
代码说明
- 使用
str.contains检查段落中是否包含目标姓名,na=False避免空值引发的异常 - 支持一个姓名出现在多个段落的场景,每个匹配的ID都会与姓名生成一条关联记录
- 最终的
result_df会清晰展示姓名与对应段落ID的映射关系
简化版(适用于单个姓名仅对应一个段落的场景)
如果可以确保每个姓名只会出现在一个段落中,可使用更简洁的写法:
def fetch_paragraph_id(name): matched_row = dfrule[dfrule['Paragraphs'].str.contains(name, na=False)] return matched_row['id'].iloc[0] if not matched_row.empty else None # 给eldf添加匹配的段落ID列 eldf['Paragraph id'] = eldf['Name'].apply(fetch_paragraph_id) # 过滤无匹配结果的行 result_df = eldf.dropna(subset=['Paragraph id'])
内容的提问来源于stack exchange,提问作者R Johnson
相关产品推荐
相关产品推荐

