Pandas合并不同DataFrame列并按原分隔符匹配关联列
解决Pandas按原列分隔符映射合并列的问题
核心思路
先建立编码(Cod)到动物(Animal)的映射字典,再通过正则拆分原List列的编码和分隔符,逐个替换编码为对应动物值,最后按原分隔符拼接结果,无匹配编码则填充'-'。
步骤实现
- 导入依赖库
import pandas as pd import re
- 创建示例DataFrame
df1 = pd.DataFrame({'List' : ['P111:P666', 'P999', 'P111;P999:P777 ','P555', 'P666:P111;P333'], 'Color' : ['R', 'R', 'B','Y', 'R']}) df2 = pd.DataFrame({'Cod' : ['P111', 'P222', 'P333', 'P444', 'P555', 'P666', 'P777'], 'Animal' : ['DOG,FROG', 'CAT', 'BUG','SNAKE,DOG', 'CAT,BUG', 'DOG', 'SNAKE']})
- 构建编码-动物映射字典
cod_to_animal = df2.set_index('Cod')['Animal'].to_dict()
- 定义映射处理函数
def process_list(s): # 去除字符串前后空格,避免拆分出错 clean_str = s.strip() # 正则拆分编码(P开头+数字)和分隔符(;或:) parts = re.findall(r'(P\d+|[;:])', clean_str) # 替换每个部分:编码用对应动物值,无匹配则填'-';分隔符直接保留 mapped_parts = [cod_to_animal.get(part, '-') if part.startswith('P') else part for part in parts] # 拼接成最终字符串 return ''.join(mapped_parts)
- 生成目标Animal列
df1['Animal'] = df1['List'].apply(process_list)
运行结果
执行后df1的结果如下:
List Color Animal 0 P111:P666 R DOG,FROG:DOG 1 P999 R - 2 P111;P999:P777 B DOG,FROG;-:SNAKE 3 P555 Y CAT,BUG 4 P666:P111;P333 R DOG:DOG,FROG;BUG
内容的提问来源于stack exchange,提问作者Mario
相关产品推荐
相关产品推荐

