当df1[‘Column 1’]包含df2[‘Column 1’]时,如何用df2[‘Column 2’]中的值替换df1[‘Column 1’]中的子字符串?
df1:
Column1 |
---|
A&O Inc. |
HP Canada |
DF2:
Column1 | Column2 |
---|---|
A&O | Allen & Overy |
HP | Hewlett Packard |
预期输出:
Column1 |
---|
Allen & Overy Inc. |
Hewlett Packard Canada |
当df1[‘Column 1’]包含df2[‘Column 1’]时,如何用df2[‘Column 2’]中的值替换df1[‘Column 1’]中的子字符串?
df1:
Column1 |
---|
A&O Inc. |
HP Canada |
DF2:
Column1 | Column2 |
---|---|
A&O | Allen & Overy |
HP | Hewlett Packard |
预期输出:
Column1 |
---|
Allen & Overy Inc. |
Hewlett Packard Canada |
你可以创建一个正则表达式来使用str.replace
和一个函数作为替换来获取匹配的名称:
import re
s = df2.set_index('Column1')['Column2']
pattern = re.compile('|'.join(map(re.escape, s.index)))
# re.compile(r'A\&O|HP', re.UNICODE)
df1['out'] = df1['Column1'].str.replace(pattern, lambda m: s.get(m.group(0)),
regex=True)
或者,如果性能不重要,您也可以使用replace
(请注意,这将遍历所有可能的替换,因此对于许多值都很慢):
s = df2.set_index('Column1')['Column2']
df1['out'] = df1['Column1'].replace(s.to_dict(), regex=True)
-输出df1
:
Column1 out
0 A&O Inc. Allen & Overy Inc.
1 HP Canada Hewlett Packard Canada