You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas合并不同DataFrame列并按原分隔符匹配关联列

解决Pandas按原列分隔符映射合并列的问题

核心思路

先建立编码(Cod)到动物(Animal)的映射字典,再通过正则拆分原List列的编码和分隔符,逐个替换编码为对应动物值,最后按原分隔符拼接结果,无匹配编码则填充'-'。

步骤实现

  1. 导入依赖库
import pandas as pd
import re
  1. 创建示例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']})
  1. 构建编码-动物映射字典
cod_to_animal = df2.set_index('Cod')['Animal'].to_dict()
  1. 定义映射处理函数
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)
  1. 生成目标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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:05:23