[英]Replace column values based on partial string match from another dataframe python 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 仅在精确的 mach 上返回 True (据我所知),这仅适用于我的数据的 30% 左右。
首先通过Frame['Keys']
加入|
extract
值对于OR
:
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
然后通过Correction['Name']
为地图创建字典和map
:
d = dict(zip(Correction['Name'], Correction['Values']))
Frame['Values'] = Frame['Keys'].map(d).fillna(Frame['Values']).astype(int)
print (Frame)
Keys Values
0 x1 1
1 x2 1
2 x3 0
3 x4 1
4 x5 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.