如何从DataFrame中提取含指定关键词的行并生成新DataFrame?
解决方法:从DataFrame匹配关键词生成新DataFrame
方法一:用apply+explode(更简洁)
直接为每个职位匹配所有符合的关键词,再展开成多行:
import pandas as pd # 构建原始DataFrame data = ['mechanical@engineer', 'field engineer','lab_scientist', 'doctor', 'computer-engineer', 'scientist/engineer'] df = pd.DataFrame(data, columns=['Job']) # 目标关键词列表 keywords = ['engineer', 'scientist'] # 1. 为每个Job生成匹配的关键词列表 df['Keyword'] = df['Job'].apply(lambda x: [kw for kw in keywords if kw in x]) # 2. 展开列表、过滤无匹配项、重置索引 df_b = df.explode('Keyword').dropna(subset=['Keyword']).reset_index(drop=True) # 调整列顺序为需求结构 df_b = df_b[['Keyword', 'Job']] print(df_b)
输出结果:
Keyword Job 0 engineer mechanical@engineer 1 engineer field engineer 2 scientist lab_scientist 3 engineer computer-engineer 4 engineer scientist/engineer 5 scientist scientist/engineer
方法二:循环关键词+str.contains(贴近你的初始思路)
遍历每个关键词,筛选匹配的行并添加关键词列,最后合并结果:
import pandas as pd data = ['mechanical@engineer', 'field engineer','lab_scientist', 'doctor', 'computer-engineer', 'scientist/engineer'] df = pd.DataFrame(data, columns=['Job']) keywords = ['engineer', 'scientist'] # 初始化空列表存储各关键词匹配结果 result_list = [] for kw in keywords: # 筛选包含当前关键词的行,复制避免修改原DataFrame matched_rows = df[df['Job'].str.contains(kw)].copy() # 为匹配行添加关键词列 matched_rows['Keyword'] = kw result_list.append(matched_rows) # 合并所有匹配结果,重置索引 df_b = pd.concat(result_list, ignore_index=True) # 调整列顺序 df_b = df_b[['Keyword', 'Job']] print(df_b)
这个方法完全贴合你“遍历关键词+用str.contains”的思路,把每个关键词匹配到的行单独处理后合并,最终得到目标结构。
内容的提问来源于stack exchange,提问作者desert_ranger
相关产品推荐
相关产品推荐

