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

如何用pandas对比新旧两个CSV的列,对已有客户复用旧表ID更新对应列

实现方案

基础版本:仅匹配FirstName、LastName两列

核心逻辑是先做新旧数据的左连接关联,拿到匹配到的旧ID,再给未匹配的记录生成新ID,实现代码如下:

  1. 导入依赖并读取数据
import pandas as pd

# 强制ID为字符串类型,避免自动转为数字丢失原有格式
old_df = pd.read_csv("OLD.csv", dtype={"ID": str})
new_df = pd.read_csv("NEW.csv")
  1. 关联旧数据获取已有ID
# 以姓名为关联键左连接,匹配成功的直接拿到旧ID
merged_df = new_df.merge(
    old_df[["ID", "FirstName", "LastName"]],
    on=["FirstName", "LastName"],
    how="left"
)
  1. 为未匹配的新客户生成ID
today_str = pd.to_datetime("today").strftime("%m%d%y")
# 筛选未匹配到旧ID的行
no_match_mask = merged_df["ID"].isna()
# 按顺序生成新ID,前缀ABC可根据你的实际规则调整
merged_df.loc[no_match_mask, "ID"] = today_str + "ABC" + (
    merged_df[no_match_mask].reset_index(drop=True).index.map(str)
)
  1. 导出结果
# 调整为你需要的列顺序后导出
merged_df = merged_df[["ID", "FirstName", "LastName"]]
merged_df.to_csv("NEW_with_correct_ID.csv", index=False)

扩展版本:自定义多条件匹配

如果需要实现多条件组合匹配(例如姓名必须匹配,同时手机号/地址满足其一,同时地区/SSN满足其一),可以自定义匹配规则,实现代码如下:

def get_matched_old_id(new_row, old_df):
    # 规则1:FirstName、LastName必须完全匹配
    name_match = (old_df["FirstName"] == new_row["FirstName"]) & (old_df["LastName"] == new_row["LastName"])
    if not name_match.any():
        return None
    temp_match = old_df[name_match]
    
    # 规则2:手机号、地址至少有一个匹配
    contact_match = (temp_match["Phone"] == new_row["Phone"]) | (temp_match["Address"] == new_row["Address"])
    if not contact_match.any():
        return None
    temp_match = temp_match[contact_match]
    
    # 规则3:地区、SSN至少有一个匹配
    cert_match = (temp_match["Region"] == new_row["Region"]) | (temp_match["SSN"] == new_row["SSN"])
    if cert_match.any():
        # 取第一个匹配到的ID,若存在多匹配可自行调整去重逻辑
        return temp_match.loc[cert_match, "ID"].iloc[0]
    return None

# 为新数据每行匹配旧ID
new_df["ID"] = new_df.apply(lambda x: get_matched_old_id(x, old_df), axis=1)

匹配完成后,直接复用基础版本里的「生成新ID+导出」逻辑即可。

注意事项

  • 匹配前建议先对所有匹配列做格式标准化,比如统一大小写、去除首尾空格、特殊字符过滤,避免因格式差异导致匹配失败
  • 如果OLD.csv存在重复的匹配项,建议提前做去重处理,避免出现同一个客户对应多个ID的情况
  • 生成新ID时如果需要保证全局唯一,可以先提取OLD.csv中同日期前缀的最大序号,接着往后生成,避免ID重复

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:09:02