根据来自另一个数据框python pandas的部分字符串匹配替换列值

时间:2019-02-21 13:20:54

标签: python-3.x pandas

我需要根据不同数据框中的键更新一些单元格值。键始终是唯一的字符串,但是第二个数据帧在键的开头或结尾可能包含也可能不包含一些额外的文本。 (不必用“”分隔)

Frame: 

Keys   Values   

x1      1            
x2      0              
x3      0             
x4      0             
x5      1 

Correction:

Name   Values   
SS x1       1             
x2 AA       1            
 x4         1


Expected output Frame: 

Keys   Values   

x1      1            
x2      1              
x3      0             
x4      1             
x5      1 

我正在使用以下内容:

frame.loc[frame['Keys'].isin(correction['Keys']), ['Values']] = correction['Values']

问题是isin仅在精确的马赫数(据我所知)上返回True,这仅适用于我的数据的大约30%。

1 个答案:

答案 0 :(得分:1)

{{1}的第一个extract值与Frame['Keys']的{​​{1}}结合在一起:

|

然后通过OR创建字典和map用于地图:

pat = '|'.join(x for x in Frame['Keys'])

Correction['Name'] = Correction['Name'].str.extract('('+ pat + ')', expand=False)
#remove non matched rows filled by NaNs
Correction = Correction.dropna(subset=['Name'])
print (Correction)
  Name  Values
0   x1       1
1   x2       1
2   x4       1