大熊猫中的单数和复数短语匹配

时间:2015-08-28 14:07:40

标签: python string pandas

我有一个pandas系列和另一个句子Dataframe如下(这里只添加了数据摘要)。

#df
0  1 teaspoon vanilla extract
1  2 eggs
2  1 cup chopped walnuts
3  1 cup rolled oats

#ingredients

0   vanilla
1   walnut
2   oat
3   egg

我正在应用以下功能来检查#ingredients中的成分是否在#df字段中可用。

masked = map(lambda x: any(ingredients.apply(str.lower).isin(x)),            
             df[0].apply(str.lower).apply(str.split))
df['Ingredient Available'] = masked

问题是当例如:eggs蒙面字段中存在复数形式的成分时,返回false(甚至在#ingredient列表中认为egg)。任何人都可以建议我一种方法来完成这项工作,而不考虑它是单数还是复数? (我遵循pandas find strings in common among Series中建议的路径,请不要将此标记为副本,因为该问题未提及此类问题。)

非常感谢

1 个答案:

答案 0 :(得分:0)

我不知道你的第一个df的列名是什么,在我的例子中它们都是成分,但以下内容可行:

In [256]:
df1['ingredients'].apply(lambda x: any(df['ingredients'].str.lower().str.contains(x.lower())))

Out[256]:
index
0    True
1    True
2    True
3    True
Name: ingredients, dtype: bool

基本上这会执行反向查找,我们使用apply迭代成分系列,然后使用contains在整个df中测试此成分的成员资格。在这种情况下,这将处理复数。