在 pandas 数据框中搜索字符串列表并将每个搜索字符串添加到新列

nov*_*tar 3 dataframe pandas

我有一个带有文本列“描述”的数据框,并且我有一个搜索字符串列表:

search = ['FR-001', 'FR-002, 'FR-003', 'FR-004']
Run Code Online (Sandbox Code Playgroud)

我想使用搜索列表中的字符串搜索数据框。我用了:

df.loc[df['Description'].str.contains('|'.join(search), na=False)]
Run Code Online (Sandbox Code Playgroud)

我得到了所需的结果,所有行都正确返回。

如何将每个成功的搜索字符串添加到新数据框列“FR”中的匹配行?

编辑

5 行描述列和预期结果列 FR

样本数据框

jez*_*ael 5

我认为你需要findall

使用@AndreyF的样本数据:

search = ['FR-001', 'FR-002', 'FR-003', 'FR-004']
df['FR'] = df['Description'].str.findall('(' + '|'.join(search) + ')')
print (df)

                            Description                FR
0  AasfasfFR-001,asfasdfafsagsdg FR-002  [FR-001, FR-002]
1                 AasfasfFR-004, FR-002  [FR-004, FR-002]
2         AasfasfFR-02,asfasdfafsagsdg                 []
3  AasfasfFR-001,asfasdfafsagsdg FR-003  [FR-001, FR-003]
4  AasfasfFR-004,asfasdfafsagsdg FR-002  [FR-004, FR-002]
Run Code Online (Sandbox Code Playgroud)

如果需要过滤掉空列表:

df = df[df['FR'].astype(bool)]
print (df)

                            Description                FR
0  AasfasfFR-001,asfasdfafsagsdg FR-002  [FR-001, FR-002]
1                 AasfasfFR-004, FR-002  [FR-004, FR-002]
3  AasfasfFR-001,asfasdfafsagsdg FR-003  [FR-001, FR-003]
4  AasfasfFR-004,asfasdfafsagsdg FR-002  [FR-004, FR-002]
Run Code Online (Sandbox Code Playgroud)