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

如何对比两个不同dataframe的id列并提取无匹配的唯一行

两个DataFrame按ID列取差异实现方案

以下提供R语言、Python两种实现方案,均支持输出你需要的两种结果格式。


方案1:R语言实现

首先构造示例数据:

df1 <- data.frame(id = c(1, 2, 3))
df2 <- data.frame(id = c(2, 3, 4))

输出格式1(全匹配带NA标记)

df_new <- merge(df1, df2, by = "id", all = TRUE)
df_new$df1_id <- ifelse(df_new$id %in% df1$id, df_new$id, NA)
df_new$df2_id <- ifelse(df_new$id %in% df2$id, df_new$id, NA)
df_new <- df_new[, c("df1_id", "df2_id")]

输出结果和你要求的完全一致:

df1_id df2_id
1      1     NA
2      2      2
3      3      3
4     NA      4

输出格式2(仅输出两边独有ID)

df1_only <- setdiff(df1$id, df2$id)
df2_only <- setdiff(df2$id, df1$id)
df_new <- data.frame(id = c(df1_only, df2_only))

输出结果:

id
1  1
2  4

方案2:Python实现

首先构造示例数据:

import pandas as pd
df1 = pd.DataFrame({"id": [1, 2, 3]})
df2 = pd.DataFrame({"id": [2, 3, 4]})

输出格式1(全匹配带NA标记)

df_new = pd.merge(df1, df2, on="id", how="outer")
df_new["df1_id"] = df_new["id"].where(df_new["id"].isin(df1["id"]), pd.NA)
df_new["df2_id"] = df_new["id"].where(df_new["id"].isin(df2["id"]), pd.NA)
df_new = df_new[["df1_id", "df2_id"]].reset_index(drop=True)

输出结果和要求一致:

df1_id  df2_id
0     1.0    <NA>
1     2.0     2.0
2     3.0     3.0
3    <NA>     4.0

输出格式2(仅输出两边独有ID)

df1_only = df1[~df1["id"].isin(df2["id"])]["id"]
df2_only = df2[~df2["id"].isin(df1["id"])]["id"]
df_new = pd.DataFrame({"id": pd.concat([df1_only, df2_only]).reset_index(drop=True)})

输出结果:

id
0   1
1   4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:09:02