如何计算两个相似的pandas列之间的索引交集?

时间:2016-10-29 16:30:31

标签: python python-3.x pandas

我有以下列表:

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 Ferretsferret匹配,因为Ferretsferret类似?对于该约束,我尝试使用case=False,但我没有得到预期的结果(*)。知道如何在新的数据帧中检索这些字符串吗?

1 个答案:

答案 0 :(得分:2)

您可以先按|加入值(正则表达式or|)并将所有值转换为小写lower - 输出位于joined }。然后按str.lower小写列中的所有值,并使用joined调用str.contains,以检查bobcatsdogdog ...是否在柱:

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