我有以下列表:
new_pets = ['Bobcats', 'dog', 'cat', 'turtle', 'monkey', 'goat', 'ferret', 'pig', 'Chipmunks', 'Capybaras', 'Ducks']
以下pandas数据帧:
In: df
0 Cats
1 Lizard
2 Dog
3 Baby Ferrets
4 Pig
5 Armadillo
如何在new_pets
(*)中显示df
的元素进入新列?:
In: df['new_col']
0 True
1 False
2 True
3 True
4 True
5 False
从文档中,我注意到可以使用contains()完成此操作,因此我尝试了以下操作:
result = df[df['pets'].str.contains(x, case = False) for x in new_pets]
但是,我不确定这是否可行。例如,是否可以将Baby Ferrets
与ferret
匹配,因为Ferrets
与ferret
类似?对于该约束,我尝试使用case=False
,但我没有得到预期的结果(*)。知道如何在新的数据帧中检索这些字符串吗?
答案 0 :(得分:2)
您可以先按|
加入值(正则表达式or为|
)并将所有值转换为小写lower
- 输出位于joined
}。然后按str.lower
小写列中的所有值,并使用joined
调用str.contains
,以检查bobcats
或dog
或dog
...是否在柱:
print (df)
pets
0 Cats
1 Lizard
2 Dog
3 Baby Ferrets
4 Pig
5 Armadillo
joined = '|'.join(new_pets).lower()
df['new_col'] = df['pets'].str.lower().str.contains(joined)
print (df)
a new_col
0 Cats True
1 Lizard False
2 Dog True
3 Baby Ferrets True
4 Pig True
5 Armadillo False