首页 > 解决方案 > 在两个 Pandas Dataframe 列之间查找匹配关键字之前和之后的单词并在新列中返回

问题描述

我试图在两个数据框列之间的字符串之前和之后找到前三个单词,并在名为“Words Before”和“Words after”的两个新列中返回。

我的数据框

Keyword          Description
pet              cat car dog pet day bye are

我想要的输出

Keyword         Description                         Words Before          Words After     
pet             cat car dog pet day bye are         cat car dog           day bye are

我试过的我来的壁橱能够手动搜索一个单词并返回之前的单词,但这不是我需要的。

df['Words Before'], df['Words After'] = df['Description'].str.extract(r"(\w+Keyword)"), df['Description'].str.extract(r"(\w+Keyword)")

任何帮助将不胜感激。

编辑:测试数据框

data = {'keyword': ['pet'], 'description': ["cat car dog pet day bye are"]}
df = pd.DataFrame(data)

标签: pythonpandasdataframe

解决方案


使用断言前瞻,即 k(?=l); k 仅当后跟 l 并且还断言肯定后向,即 (?<=e)f; f 只有当 e 出现在它之前。代码如下

df=df.assign(WordsBefore=df.Description.str.extract('(^\D+(?=pet))'),
WordsAfter=df.Description.str.extract('((?<=pet)\D+)'))
print(df)

如果要直接从数据框中调用关键字,请使用 f 字符串;下面的代码

s=df.Keyword
df=df.assign(WordsBefore=df.Description.str.extract("(^\D+(?=f'{s}'))"),
WordsAfter=df.Description.str.extract("((?<=f'{s}')\D+)"))
print(df)



    Keyword      Description            WordsBefore    WordsAfter
0     pet  cat car dog pet day bye are  cat car dog    day bye are

推荐阅读