检查列是否包含来自lis的str

2024-05-20 22:27:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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

我只希望最后一行为假


Tags: infalsedf列表dataanyitemcat
2条回答

对于pandas,您应该尽量不使用for循环或apply,我使用的是带有isinanyDataFrame构造函数

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

翻转你的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上迭代并查看该项是否在row['animals']

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

将遍历row['animals'],并查看row['animals']的值是否在cats列表中

相关问题 更多 >