Python 检查列是否包含列表中的任何str

Python 检查列是否包含列表中的任何str,python,pandas,dataframe,Python,Pandas,Dataframe,我尝试使用any()检查列是否包含列表中的任何字符串,并使用相应的结果创建一个新列 df_data = pd.DataFrame({'A':[2,1,3], 'animals': ['cat, frog', 'kitten, fish', 'frog2, fish']}) cats = ['kitten', 'cat'] df_data['cats'] = df_data.apply(lambda row: True if any(item in cats for item in row['an

我尝试使用any()检查列是否包含列表中的任何字符串,并使用相应的结果创建一个新列

df_data = pd.DataFrame({'A':[2,1,3], 'animals': ['cat, frog', 'kitten, fish', 'frog2, fish']})
cats = ['kitten', 'cat']
df_data['cats'] = df_data.apply(lambda row: True if any(item in cats for item in row['animals']) else False, axis = 1)
我得到了这些结果,但我不明白为什么前两行的结果是错误的:

   A       animals   cats
0  2     cat, frog  False
1  1  kitten, fish  False
2  3   frog2, fish  False
我只希望最后一行的结果为假

翻转你的iterables

df_data['cats'] = df_data.apply(lambda row: True if any([item in row['animals'] for item in cats]) else False, axis = 1)

print(df_data)
#    A       animals   cats
# 0  2     cat, frog   True
# 1  1  kitten, fish   True
# 2  3   frog2, fish  False
如果你仔细看

item in row['animals'] for item in cats
将迭代
cats
并查看项目是否在
行['anies']

item in cats for item in row['animals']

将迭代
行['Animages']
并查看
行['Animages']
的值是否在cats列表中

使用熊猫时,您应该尽最大努力不要使用for循环或apply,我正在使用
数据帧
构造函数和
任何

df_data['cats']=pd.DataFrame(df_data.animals.str.split(', ').tolist()).isin(cats).any(1)
df_data
   A       animals   cats
0  2     cat, frog   True
1  1  kitten, fish   True
2  3   frog2, fish  False

只是好奇你是否考虑了代码的速度,或者在这种情况下,我担心向他们展示他们的代码的问题。有时我会试图纠正错误,有时我会尝试提供更好的方法。虽然我很感激当我从你的评论和回答中学到新的东西。此外,如果问题集足够长,足以使速度成为一个问题,我才真正关心代码的速度。否则,可读性也很好。好吧,这很公平:-)