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

如何基于另一DataFrame扩展DataFrame,补充非重复engine-id组合行

问题:扩展DataFrame并补充缺失的唯一组合行

需要将现有两个DataFrame(df1和df2)合并,补充df2中未在df1出现的engine与id组合行,最终结果无重复行。

现有DataFrame:

df1:

engine       id
F1 D2 J3     100234
F1 D2 J3     100238
K2 JM F2     200788
K2 JM F2     200790

df2:

engine       id
F1 D2 J3     100234
F1 D2 J3     100244
K2 JM F2     200788
K2 JM F2     200850
K2 JM F2     200690

期望结果:

engine       id
F1 D2 J3     100234
F1 D2 J3     100238
K2 JM F2     200788
K2 JM F2     200790
F1 D2 J3     100244
K2 JM F2     200850
K2 JM F2     200690

解决方案

方法1:合并后去重(最简单直接)

先将两个DataFrame纵向拼接,再删除重复行,保留首次出现的记录(即保留df1中的原有行):

import pandas as pd

# 拼接两个DataFrame
combined = pd.concat([df1, df2])
# 去重,按所有列判断,保留第一次出现的行
result = combined.drop_duplicates(keep='first').reset_index(drop=True)

方法2:先筛选df2中缺失的行再合并

如果数据量较大,这种方法更高效,避免拼接整个大表再去重:

方式A:用tuple和isin筛选

# 将每行转为元组,判断df2的行是否存在于df1中
mask = df2.apply(tuple, axis=1).isin(df1.apply(tuple, axis=1))
# 取出df2中不在df1的行
new_rows = df2[~mask]
# 合并df1和新行
result = pd.concat([df1, new_rows]).reset_index(drop=True)

方式B:用merge的indicator参数筛选

# 左连接df2和df1,添加_merge列标记匹配情况
temp = df2.merge(df1, on=['engine', 'id'], how='left', indicator=True)
# 筛选出仅在df2中存在的行,删除_merge列
new_rows = temp[temp['_merge'] == 'left_only'].drop('_merge', axis=1)
# 合并得到结果
result = pd.concat([df1, new_rows]).reset_index(drop=True)

以上方法都能得到你需要的无重复扩展后的DataFrame。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:16:22