我有两个长名字的熊猫系列,像这样:
0 abrakadabra
1 hokus pokus
2 lumio
3 flippendo
4 avada kedavra第二个名字很短:
0 abra
1 kra
2 avada
3 hokus
4 lalala目的是检查第一个列表中的任何元素是否包含第二个列表中的元素。如果是这样的话,将元素从一个列表更改为第二个列表中的学徒元素。理想的产出:
0 abra
1 hokus
2 lumio
3 flippendo
4 avada设立了以下职能:
def common(serie1,serie2):
for index1,value1 in enumerate(list(serie1)):
for index2,value2 in enumerate(list(serie2)):
if value1 in value2:
serie2[index2]=value1
else:
serie2[index2]=value2
return serie2对于这两个短剧,它工作得很完美。但是,对于较长的一个函数,当serie2不在value2时,函数不保存来自value2的名称,而将0放在那里。我找不到我的功能出了什么问题。
发布于 2018-02-26 09:06:09
您可以使用extract将s2 by |的所有值连接起来,用于正则表达式OR和fillna。
pat = r'({})'.format('|'.join(s2))
#for exact match
#pat = r'(\b{}\b)'.format('|'.join(s2))
s = s1.str.extract(pat, expand=False).fillna(s1)
print (s)
0 abra
1 hokus
2 lumio
3 flippendo
4 avada
Name: A, dtype: objecthttps://stackoverflow.com/questions/48984731
复制相似问题