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

如何从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:47:42