如何移除第二个DataFrame中el_batch列无匹配的大写字母后缀
处理DataFrame中el_batch列的后缀修正问题
问题背景
现有两个DataFrame:
第一个DataFrame(记为df1):
MD Uniformity TD Uniformity el_batch 0 0.007474 0.021731 PC-322 1 0.009175 0.022445 PC-328 2 0.013531 0.022607 PC-332-A 3 0.007609 0.025613 PC-332-B 4 0.013437 0.019079 PC-333 5 0.01541 NaN PC-336 6 0.017017 0.020861 PC-337 7 0.014641 0.020523 PC-339-B 8 0.009083 0.03093 PC-340 9 0.010896 0.014948 PC-341
第二个DataFrame(记为df2):
el_batch fraction_load quantity fraction_max fraction_min 0 PC-322-A 22.964 99 1400.5 1370.5 1 PC-322-A 23.501 852 1430.6 1400.6 2 PC-322-A 23.321 115 1410.5 1400.5 3 PC-322-A 23.501 114 1420.6 1410.6 4 PC-322-A 23.681 68 1430.7 1420.7 5 PC-328 24.037 527 1460.7 1430.7 6 PC-328 23.501 411 1430.6 1400.6 7 PC-332-A 24.037 178 1460.7 1430.7 8 PC-332-A 22.964 57 1400.5 1370.5 9 PC-332-A 23.501 1676 1430.6 1400.6 10 PC-332-A 22.964 157 1400.5 1370.5 11 PC-332-A 23.501 175 1430.6 1400.6 12 PC-332-A 23.501 981 1430.6 1400.6 13 PC-333-A 23.501 4186 1430.6 1400.6 14 PC-336 27.795 309 1671.4 1641.4 15 PC-336 27.258 194 1641.3 1611.3 16 PC-337-A 24.037 22 1460.7 1430.7 17 PC-337-A 24.574 142 1490.8 1460.8 18 PC-341 25.111 620 1520.9 1490.9 19 PC-344 24.037 57 1460.7 1430.7 20 PC-344 23.501 552 1430.6 1400.6 21 PC-339-B 24.037 240 1460.7 1430.7 22 PC-339-B 23.501 612 1430.6 1400.6 23 PC-340 22.964 463 1400.5 1370.5 24 PC-340 23.501 636 1430.6 1400.6
需求
对df2的el_batch列做如下处理:
- 若某个带大写字母后缀(如
PC-322-A)的值在df1的el_batch列中不存在,则移除该后缀,保留前缀部分(如PC-322); - 若该带后缀的值在
df1中存在(如PC-332-A),则保持原样。
实现方法
直接按下面的步骤操作就能搞定:
- 先把
df1里所有的el_batch值存成一个集合,这样查找效率更高:
valid_batches = set(df1['el_batch'])
- 写个小函数处理每个批次号:先判断原始值是否在
df1的有效集合里,在的话直接返回;不在的话,要是最后是-大写字母的格式,就去掉后面的后缀,只保留前面的部分:
def fix_batch(batch): if batch in valid_batches: return batch # 从最后一个"-"分割,判断后面的部分是不是大写字母 split_parts = batch.rsplit('-', 1) if len(split_parts) == 2 and split_parts[1].isupper(): return split_parts[0] # 要是不符合后缀格式,就原样返回 return batch
- 把这个函数应用到
df2的el_batch列上:
df2['el_batch'] = df2['el_batch'].apply(fix_batch)
处理结果验证
处理后df2的el_batch列会按规则修正:
PC-322-A→PC-322(df1中无该值)PC-332-A保持不变(df1中存在该值)PC-333-A→PC-333(df1中无该值)PC-337-A→PC-337(df1中无该值)- 其他符合条件的值都会按规则调整
内容的提问来源于stack exchange,提问作者Omer Davidi
相关产品推荐
相关产品推荐

