Python 从列表中搜索部分字符串,并使用该部分字符串添加列

Python 从列表中搜索部分字符串,并使用该部分字符串添加列,python,pandas,Python,Pandas,我习惯于在df.column中搜索我保存在序列中的部分字符串,并习惯于使用在每行中找到的str创建一个新列。我的问题有一部分是由 : 例如,假设我有序列s=pd.series(['cat','hat','dog','fog','pet',]),我想找到s包含['og','at']中任何一个的所有地方,我想得到除pet之外的所有东西 解决办法是: >>> searchfor = ['og', 'at'] >>> s[s.str.contains('|'.join

我习惯于在df.column中搜索我保存在序列中的部分字符串,并习惯于使用在每行中找到的str创建一个新列。我的问题有一部分是由 :

例如,假设我有序列s=pd.series(['cat','hat','dog','fog','pet',]),我想找到s包含['og','at']中任何一个的所有地方,我想得到除pet之外的所有东西

解决办法是:

>>> searchfor = ['og', 'at']
>>> s[s.str.contains('|'.join(searchfor))]
0    cat
1    hat
2    dog
3    fog
dtype: object
但是我想

         pet    contains
    0    cat    at
    1    hat    at
    2    dog    og
    3    fog    og
    dtype: object
使用,如果不匹配,则获取
NaN
s,因此添加:

searchfor = ['og', 'at']
df['new'] = df['pet'].str.extract('(' + '|'.join(searchfor) + ')', expand=False)
df = df.dropna(subset=['new'])
print (df)
   pet contains1 new
0  cat        at  at
1  hat        at  at
2  dog        og  og
3  fog        og  og