我有两个 Pandas 系列,名字很长:
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
对于这两个短篇系列来说,它效果非常好。然而,对于较长的函数,当 value1 不在 value2 中时,函数不会保存 serie2 中的名称,而是将 0 放在那里。我找不到我的函数有什么问题。
最佳答案
您可以使用extract
通过将 s2
的所有值通过 |
加入正则表达式 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: object
关于python - 根据其他系列更改 pandas 系列中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48984731/