我有一个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中建议的路径,请不要将此标记为副本,因为该问题未提及此类问题。)
非常感谢
答案 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中测试此成分的成员资格。在这种情况下,这将处理复数。