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

合并两个DataFrame,重复c1列值仅保留d1对应行的实现方法

合并DataFrame并保留指定表的重复行

问题场景

现有两个均包含c1、c2列的DataFrame(记为d1和d2),合并时需保留d1的所有行,同时加入d2中c1列未在d1出现过的行;若c1列存在重复值,仅保留d1中的对应行。

示例数据

d1内容:

Customer       Status
0    Alice       closed
1      Bob  in-progress
2     John       closed

d2内容:

Customer       Status
0    Alice  in-progress
1     Lara  in-progress
2    Santa       closed

期望结果:

Customer       Status
0    Alice       closed
1      Bob  in-progress
2     John       closed
3     Lara  in-progress
4    Santa       closed

解决方案

方法1:合并后去重(优先保留d1行)

先将d1和d2纵向合并,再以c1列(示例为Customer)为依据去重,保留首次出现的行(因合并时先放d1,首次出现的就是d1的行)。

代码示例:

import pandas as pd

df1 = pd.DataFrame({"Customer":["Alice", "Bob", "John"],
                    "Status":["closed","in-progress","closed"]})

df2 = pd.DataFrame({"Customer":["Alice", "Lara", "Santa"],
                    "Status":["in-progress","in-progress","closed"]})

# 合并两个DataFrame,顺序为df1在前、df2在后
combined = pd.concat([df1, df2])
# 按Customer列去重,保留第一次出现的行,重置索引
result = combined.drop_duplicates(subset='Customer', keep='first').reset_index(drop=True)

print(result)

方法2:筛选d2独有行后合并

先筛选出d2中c1列未出现在d1里的行,再和d1合并,从根源避免重复。

代码示例:

# 筛选d2中Customer不在df1的Customer集合中的行
d2_unique_rows = df2[~df2['Customer'].isin(df1['Customer'])]
# 合并df1和筛选后的d2行
result = pd.concat([df1, d2_unique_rows]).reset_index(drop=True)

print(result)

方法3:外连接+字段填充

通过外连接合并两个DataFrame,优先使用d1的字段值,缺失部分用d2的填充,适合多字段场景。

代码示例:

# 外连接合并,为两个表的Status字段添加后缀区分
merged = df1.merge(df2, on='Customer', how='outer', suffixes=('_d1', '_d2'))
# 优先用df1的Status,无值则用df2的Status填充
merged['Status'] = merged['Status_d1'].fillna(merged['Status_d2'])
# 保留目标列并重置索引
result = merged[['Customer', 'Status']].reset_index(drop=True)

print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:17:22