Используйте |
для регулярных выражений or
в str.contains
с приведенным логическим значением к целому числу astype
:
df['Cat'] = df['A'].astype(str).str.contains('Cat|kitten').astype(int)
df['Dog'] = df['A'].astype(str).str.contains('Dog|puppy').astype(int)
Аналогично:
a = df['A'].astype(str)
df['Cat'] = a.str.contains('Cat|kitten').astype(int)
df['Dog'] = a.str.contains('Dog|puppy').astype(int)
print (df)
A Cat Dog
0 Cat had a nap 1 0
1 Dog had puppies 0 1
2 Did you see a Donkey 0 0
3 kitten got angry 1 0
4 puppy was cute 0 1
Более динамичное решение со словарем list
s:
dic = {'Cat':['Cat','kitten'],'Dog':['Dog','puppy']}
for k, v in dic.items():
df[k] = df['A'].astype(str).str.contains('|'.join(v)).astype(int)
print (df)
A Cat Dog
0 Cat had a nap 1 0
1 Dog had puppies 0 1
2 Did you see a Donkey 0 0
3 kitten got angry 1 0
4 puppy was cute 0 1