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

如何用Pandas合并两个DataFrame为新增cnpj生成自增id

Pandas 合并两个DataFrame并自增生成新ID方案

需求说明

两个DataFrame结构如下:

  • 第一个DataFrame(记为df1):包含id、cnpj两个字段
  • 第二个DataFrame(记为df2):仅包含cnpj字段
    合并规则:
  • 完整保留df1的所有原有数据
  • 仅追加df2中存在、但df1未收录的独有cnpj条目
  • 新增条目的id从df1的最大id值开始,依次+1递增

实现代码

import pandas as pd

# --------------------------
# 测试数据(和示例一致,可替换为实际数据)
# --------------------------
df1 = pd.DataFrame({
    'id': [11, 12, 13, 14],
    'cnpj': ['552030405560', '709050358572', '999680558533', '585680558542']
})
df2 = pd.DataFrame({
    'cnpj': ['552030405560', '709050358572', '999680558533', '585680558542', '658540805552', '498546543258']
})

# --------------------------
# 核心处理逻辑
# --------------------------
# 1. 筛选df2中不在df1内的新增cnpj
new_entries = df2[~df2['cnpj'].isin(df1['cnpj'])].reset_index(drop=True)

# 2. 为新增条目生成自增ID(兼容df1为空的边界场景)
start_id = df1['id'].max() + 1 if not df1.empty else 1
new_entries['id'] = range(start_id, start_id + len(new_entries))

# 3. 拼接原有数据和新增数据,调整列顺序和原表对齐
final_df = pd.concat([df1, new_entries], ignore_index=True)[df1.columns]

运行结果

执行代码后得到的final_df完全匹配预期输出:

idcnpj
11552030405560
12709050358572
13999680558533
14585680558542
15658540805552
16498546543258

补充说明

  • 如果cnpj字段存在格式不统一问题(比如部分是数值、部分是字符串,或存在前后空格),需要先做清洗:比如df1['cnpj'] = df1['cnpj'].astype(str).str.strip(),df2做相同处理后再做匹配,避免漏判重复值
  • 如果需要去重后保留df2中新增cnpj的首次出现顺序,当前逻辑已经默认满足,不需要额外调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:09:38