我尝试使用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)
我得到了这些结果,但我不明白为什么前两行都为False:
A animals cats
0 2 cat, frog False
1 1 kitten, fish False
2 3 frog2, fish False
我希望仅在最后一行得到False
答案 0 :(得分:1)
对于熊猫,您应该尽量不要使用for循环或apply,我正在将DataFrame
和isin
和any
一起使用
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
答案 1 :(得分:0)
翻转可迭代项
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']
的值是否在猫列表中