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