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

合并两个DataFrame后如何重新排序并执行Upsert操作

数据表合并更新解决方案

模拟示例数据

先给出符合场景的样例表,方便理解处理逻辑:

初始目标表(TargetDF)

import pandas as pd

TargetDF = pd.DataFrame({
    "id": [1, 2, 3],
    "s_gp": ["abc", "bcz", "xyz"],
    "value": [10, 20, 30]
})

待合并源表(SourceDF,无id字段)

SourceDF = pd.DataFrame({
    "s_gp": ["fjk", "bcz", "dfg"],
    "value": [40, 25, 50]
})

处理步骤

1. 更新已有记录

通过s_gp字段匹配TargetDF里已存在的记录,用SourceDF的最新值覆盖:

# 筛选SourceDF中存在于TargetDF的记录
existing_rows = SourceDF[SourceDF["s_gp"].isin(TargetDF["s_gp"])]

# 关联后替换旧值,保留原id
TargetDF = TargetDF.merge(existing_rows, on="s_gp", how="left", suffixes=("_old", ""))
TargetDF["value"] = TargetDF["value"].fillna(TargetDF["value_old"])
TargetDF.drop(columns=["value_old"], inplace=True)

2. 新增记录并分配递增id

筛选SourceDF里TargetDF没有的新记录,给它们分配比当前最大id大的连续id:

# 筛选SourceDF中的新记录
new_rows = SourceDF[~SourceDF["s_gp"].isin(TargetDF["s_gp"])]

# 生成递增id
max_existing_id = TargetDF["id"].max()
new_rows["id"] = range(max_existing_id + 1, max_existing_id + 1 + len(new_rows))

3. 合并并修正顺序

把新记录合并到TargetDF,再按id排序保证顺序和目标表id逻辑一致:

# 合并新记录
TargetDF = pd.concat([TargetDF, new_rows], ignore_index=True)

# 按id排序,确保顺序匹配目标表id规则
TargetDF.sort_values("id", inplace=True)
TargetDF.reset_index(drop=True, inplace=True)

最终结果

处理后的TargetDF如下:

id s_gp  value
0   1  abc     10
1   2  bcz     25
2   3  xyz     30
3   4  fjk     40
4   5  dfg     50
  • 原bcz记录的value已从20更新为25
  • 新增fjk、dfg记录,id从4开始递增
  • 整体按id排序,保证目标表id的一致性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:41:10