熊猫,检查一列是否包含另一列的字符,并标记出该字符?

时间:2021-03-22 11:47:33

标签: python pandas dataframe

有 2 个数据框,df1 和 df2。例如

df1 = pd.DataFrame({'index': [1, 2, 3, 4],
                    'col1': ['12abc12', '12abcbla', 'abc', 'jh']})

df2 = pd.DataFrame({'col2': ['abc', 'efj']})

我想要的看起来像这样(找到包含 df2 中的字符的所有行,并将它们标记出来)

   index      col1      col2
0      1   12abc12       abc
1      2  12abcbla       abc
2      3       abc       abc
3      4        jh       

我找到了一个 similar question,但不是我想要的。感谢您提前提供任何想法。

1 个答案:

答案 0 :(得分:2)

如果需要第一个匹配值,请使用 Series.str.extract

df1['new'] = df1['col1'].str.extract(f'({"|".join(df2["col2"])})', expand=False).fillna('')
print (df1)
   index      col1  new
0      1   12abc12  abc
1      2  12abcbla  abc
2      3       abc  abc
3      4        jh     

如果需要所有匹配的值,请使用 Series.str.findallSeries.str.join

df1 = pd.DataFrame({'index': [1, 2, 3, 4],
                    'col1': ['12abc1defj2', '12abcbla', 'abc', 'jh']})

df2 = pd.DataFrame({'col2': ['abc', 'efj']})

df1['new'] = df1['col1'].str.findall("|".join(df2["col2"])).str.join(',')
print (df1)
   index         col1      new
0      1  12abc1defj2  abc,efj
1      2     12abcbla      abc
2      3          abc      abc
3      4           jh