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

使用Pandas实现source.xlsx与output.xlsx的多条件匹配取值

嘿,我刚好处理过类似的Excel数据匹配需求,给你整理了一个用Python Pandas实现的方案,完全贴合你的逻辑:

Excel数据匹配取值实现方案

匹配逻辑回顾

先再明确一遍核心规则,避免理解偏差:

  • 优先用source.xlsx的Caller ID匹配output.xlsx的svc_no
  • 若Caller ID为NULL或第一轮无匹配结果,再用source.xlsx的adsl匹配output.xlsx的port
  • 无论哪种匹配成功,最终都将对应的Caller ID写入目标位置(忽略port字段)

准备工作

首先确保你安装了必要的依赖库,打开终端运行:

pip install pandas openpyxl

提示:openpyxl是用来读写xlsx格式文件的引擎,必须安装

核心代码实现

import pandas as pd

# 1. 读取两个Excel文件,统一用字符串类型避免格式匹配问题
source_df = pd.read_excel('source.xlsx', dtype=str)
output_df = pd.read_excel('output.xlsx', dtype=str)

# 2. 第一轮匹配:Caller ID 匹配 svc_no
# 保留output的所有行,关联source中匹配的Caller ID和adsl
merged_result = pd.merge(
    output_df,
    source_df[['Caller ID', 'adsl']],
    left_on='svc_no',
    right_on='Caller ID',
    how='left'
)

# 3. 筛选需要二次匹配的行:Caller ID为NULL或未匹配到的记录
need_second_match = merged_result[
    (merged_result['Caller ID'] == 'NULL') | merged_result['Caller ID'].isna()
].copy()

# 4. 第二轮匹配:adsl 匹配 port,获取对应Caller ID
second_match_data = pd.merge(
    need_second_match,
    source_df[['Caller ID', 'adsl']],
    left_on='port',
    right_on='adsl',
    how='left',
    suffixes=('_original', '_matched')
)

# 更新Caller ID字段:用二次匹配结果替换原空值/NULL
second_match_data['Caller ID'] = second_match_data['Caller ID_matched'].fillna(second_match_data['Caller ID_original'])

# 把二次匹配的结果同步回总数据集
merged_result.update(second_match_data)

# 5. 可选:把字符串'NULL'转换为Pandas空值,方便后续处理
merged_result['Caller ID'] = merged_result['Caller ID'].replace('NULL', pd.NA)

# 6. 写入回output.xlsx(⚠️ 注意:会覆盖原文件,务必先备份!)
merged_result.to_excel('output.xlsx', index=False, engine='openpyxl')

关键细节提示

  • 用dtype=str读取所有列:避免因为数值/字符串格式不一致导致匹配失败(比如Caller ID是数字但存成字符串,svc_no是数值类型,直接匹配会出错)
  • 两次匹配都用how='left':确保output.xlsx的所有原有行都被保留,不会丢失任何数据
  • update方法:只更新需要修改的行,已经匹配成功的记录不会被改动
  • 备份原文件:写入前一定要复制一份output.xlsx,避免误操作导致数据丢失

测试建议

可以先拿一小部分测试数据验证逻辑:

  • 找几条Caller ID能匹配svc_no的记录,确认Caller ID正确写入
  • 找几条Caller ID为NULL但adsl能匹配port的记录,确认对应Caller ID(哪怕是NULL)被正确写入
  • 找两条都匹配不上的记录,确认保持原有状态不变

内容的提问来源于stack exchange,提问作者Ricky Aguilar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:38:28