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

如何高效筛选DataFrame中关键词存在于描述列的行?

高效筛选DataFrame:保留关键词存在于描述中的行

问题场景

给定如下DataFrame:

Description     keyword
1  plays the piano   plays
2  plays the piano   write
3  plays the piano   piano
4 knows how to write  the
5 knows how to write  to

需要筛选出每行keyword列值存在于对应Description列值中的行,预期结果:

Description     keyword
1  plays the piano   plays
3  plays the piano   piano
5 knows how to write  to

高效实现方法

下面按效率从高到低推荐几种方案:

1. 列表推导式(优先推荐)

纯Python循环的列表推导式在处理DataFrame逐行判断时,效率远高于apply,代码也简洁:

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame(
    {
        'Description': ['plays the piano', 'plays the piano', 'plays the piano', 'knows how to write', 'knows how to write'],
        'keyword': ['plays', 'write', 'piano', 'the', 'to']
    },
    index=[1,2,3,4,5]
)

# 生成筛选掩码
mask = [kw in desc for desc, kw in zip(df['Description'], df['keyword'])]
# 应用筛选
filtered_df = df[mask]

2. NumPy向量化函数

利用np.vectorize包装判断逻辑,底层基于NumPy优化,适合超大数据量场景:

import numpy as np

def keyword_in_description(desc, kw):
    return kw in desc

# 生成向量化判断函数
vec_judge = np.vectorize(keyword_in_description)
# 生成掩码并筛选
mask = vec_judge(df['Description'], df['keyword'])
filtered_df = df[mask]

3. Pandas apply方法(适合小数据量)

代码最易读,但逐行处理的特性导致大数据量下效率较低:

filtered_df = df[df.apply(lambda row: row['keyword'] in row['Description'], axis=1)]

注意事项

如果需要精确匹配完整单词(比如避免'play'匹配到'plays'),可以改用正则表达式的单词边界匹配,调整判断逻辑为:

import re

mask = [bool(re.search(r'\b' + re.escape(kw) + r'\b', desc)) for desc, kw in zip(df['Description'], df['keyword'])]

内容的提问来源于stack exchange,提问作者Christos Grigoriadis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:30:52