Python 基于另一列提取子字符串

Python 基于另一列提取子字符串,python,pandas,Python,Pandas,我有两个数据帧。以下是第一个df: df1={"columnA":['apple,cherry','pineple,lemon','banana, pear','cherry, pear, lemon']} df1=pd.DataFrame(df1) 第二个df: df2={"columnB":['lemon','cherry']} df2=pd.DataFrame(df2) 我已经得到了df1中出现在df2中的所有值。 我正在使用以下代码进行筛选:

我有两个数据帧。以下是第一个df:

df1={"columnA":['apple,cherry','pineple,lemon','banana, pear','cherry, pear, lemon']} 
df1=pd.DataFrame(df1)
第二个df:

df2={"columnB":['lemon','cherry']}
df2=pd.DataFrame(df2)
我已经得到了df1中出现在df2中的所有值。 我正在使用以下代码进行筛选:

words = [rf'\b{string}\b' for string in df2.columnB]
df1[df1['columnA'].str.contains('|'.join(words))]
我得到了以下信息:

所以我想做的下一步是从上述结果中删除所有不需要的子字符串,如下所示:


请告诉我如何实现这一点?

我认为您需要一个单独的方法来应用于数据帧:

def keep_words(cell, df):
    words = cell.split(',')
    result = []
    for word in words:
         if word.strip() in list(df.columnB):
              result.append(word)
    return ','.join(result)

words = [rf'\b{string}\b' for string in df2.columnB]
df1 = df1[df1['columnA'].str.contains('|'.join(words))]
df3 = df1.columnA.apply(lambda x: keep_words(x, df2))
由于这需要几个步骤,因此定义一个单独的方法(keep_words),该方法接收每个单元格中的字符串,并将数据帧与接受的单词进行比较,将字符串中的每个单词与接受的单词的“列表”进行比较,并返回符合条件的单词

不过,我不确定在更大的数据帧中的性能