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

PySpark合并两个DataFrame并保留唯一值的实现方案

合并两个DataFrame保留指定记录的解决方案

方法一:拼接后去重(简洁直观)

这种方式先将两个DataFrame纵向拼接,再基于唯一标识列去重,保留第一次出现的记录(也就是questions_version1中的共有记录):

import pandas as pd

# 拼接两个DataFrame
combined = pd.concat([questions_version1, questions_version2])
# 根据question、answer、version组合去重,保留首次出现的记录
merged_df = combined.drop_duplicates(subset=['question', 'answer', 'version'], keep='first')
# 按question排序,与目标结果格式对齐
merged_df = merged_df.sort_values('question').reset_index(drop=True)

原理:concat把两个表的行合在一起,drop_duplicates指定三个列作为判断重复的依据,keep='first'确保优先保留questions_version1里的记录(因为它在拼接时排在前面),自动过滤掉questions_version2中重复的行,同时保留questions_version2独有的行。


方法二:先筛选独有记录再合并(高效适合大数据)

如果数据量较大,先筛选出questions_version2中独有的记录,再和questions_version1合并,能减少不必要的计算:

import pandas as pd

# 生成两个DataFrame的唯一标识索引
v1_index = questions_version1.set_index(['question', 'answer', 'version']).index
v2_index = questions_version2.set_index(['question', 'answer', 'version']).index

# 筛选questions_version2中不在questions_version1里的记录
v2_unique = questions_version2[v2_index.difference(v1_index)]

# 合并questions_version1和v2_unique
merged_df = pd.concat([questions_version1, v2_unique]).sort_values('question').reset_index(drop=True)

原理:通过索引对比,精准提取questions_version2中没有出现在questions_version1的行,再和原表合并,避免了拼接全表的开销,结果和方法一完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:33:30