繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM