在pandas列中的列表和列表之间匹配相似的元素

时间:2018-07-24 09:38:22

标签: python python-3.x pandas

我问了问题here。这是它的修改形式,因此我将其发布为新问题。我有一个L2=['marvel comics','bmw','mercedez benz','audi']列表。

我有一个列名称为words_col的pandas数据框,其中包含每个单元格中的元素列表,并希望将列列表与list L2匹配并将其放在新列match_words中。 如果它还包含任何单词匹配,例如mercedez中的mercedez benzmarvel中的marvel comics,则它应返回元素。因此,最终输出将是。

words_col                                   match_words
['marvel','car', 'entertainment','audi']    ['marvel comics','audi']
['audi','usa','benz']                       ['audi']
['movies','imdb','chrome','mercedez']       ['mercedez benz']     
......
......

我尝试过的事情:

res = []
for i in df['words_col']:
    for a in i:
       for j in L2:
         if a in j:
            print (j) 

它将所有单词组合在一起。我如何将其添加到pandas列中,因为匹配关键字应对应于words_col

的每个单元格

1 个答案:

答案 0 :(得分:1)

这应该做到:

df = pd.DataFrame({'words_col': [['marvel','car', 'entertainment','audi'],
                                 ['audi','usa'],
                                 ['movies','imdb','chrome','mercedez']]})

words = ['marvel comics','bmw','mercedez benz','audi']

df['match_words'] = df['words_col'].apply(lambda terms: [word for word in words if any(term in word for term in terms)])

df
#                            words_col            match_words
#0  [marvel, car, entertainment, audi]  [marvel comics, audi]
#1                         [audi, usa]                 [audi]
#2    [movies, imdb, chrome, mercedez]        [mercedez benz]

编辑

df['match_words'] = df['words_col'].apply(lambda terms: [word for word in words if any(word.startswith(term) for term in terms)])

这将根据您的最新评论来判断word是否以word开头。

相关问题