熊猫根据另一列提取子字符串

时间:2020-08-28 19:45:08

标签: python pandas

我有2个数据框。以下是第一个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))]

我明白了:

enter image description here

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

enter image description here

请让我知道我该如何实现?

1 个答案:

答案 0 :(得分:0)

我认为您需要将单独的方法应用于DataFrame:

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),该方法将每个单元格内的字符串放入其中,并且DataFrame和可接受的单词将字符串中的每个单词与“列表”进行比较接受的单词并返回符合条件的单词。

我不确定大型DataFrames的性能。