Python 提高Pandas关键字搜索的性能

Python 提高Pandas关键字搜索的性能,python,pandas,Python,Pandas,尝试分析一些文本数据并搜索关键字。我在一个数据框中有文本数据,在另一个数据框中有关键字。对于关键字数据框中的每个项目,搜索文本数据框的最有效方法是什么?如果可能的话,我会尽量避免循环,因为我知道这会导致非常糟糕的性能。我考虑编写一个函数,然后在源数据帧上使用dataframe.apply,但我想不出一种方法来绕过必须循环第二个数据帧并查找源中的每个关键字 我在下面提供了一个源数据设置的示例,以及一个生成的数据帧的原型。分数将是该行的文本中有多少关键字。提前谢谢 #%% Setup import

尝试分析一些文本数据并搜索关键字。我在一个数据框中有文本数据,在另一个数据框中有关键字。对于关键字数据框中的每个项目,搜索文本数据框的最有效方法是什么?如果可能的话,我会尽量避免循环,因为我知道这会导致非常糟糕的性能。我考虑编写一个函数,然后在源数据帧上使用dataframe.apply,但我想不出一种方法来绕过必须循环第二个数据帧并查找源中的每个关键字

我在下面提供了一个源数据设置的示例,以及一个生成的数据帧的原型。分数将是该行的文本中有多少关键字。提前谢谢

#%% Setup
import pandas as pd

source_df = pd.DataFrame(
    {
        "IDNumber": [4, 5, 6, 7],
        "Text": [
            "Number 4 has a cell phone, lightsaber, and a tablet",
            "Number 5 has a burrito",
            "Number 6 has a lightsaber and the senate",
            "",
        ],
    }
)

keyword_df = pd.DataFrame(
    {
        "Keyword": [
            "lightsaber",
            "microphone",
            "senate",
            6,
        ]
    }
)

#%% Trying to come up with something that results in
#   IDNumber    Text                                                    Score
# 0 4           Number 4 has a cell phone, lightsaber, and a tablet.    1
# 1 5           Number 5 has a burrito                                  0
# 2 6           Number 6 has a lightsaber and the senate                3
# 3 7                                                                   0

假设IDNumber 6的分数是3而不是2,下面是一个解决方案:

source_-df['Score']=source_-df['Text'].str.findall(
“|”。join(关键字_df['keyword'].astype('str').tolist())
).str.len()

如果“6号有光剑和元老院”,为什么“6号有光剑和元老院”不是3号?我的错,编辑为修复。啊,捕捉得不错;我加入6只是为了说明有些东西可能是数字,但它确实解决了3。我来修原版。这对我来说很有效,而且似乎很有效。谢谢