如何查找两个Pandas DataFrame的差异,提取dataframeA有而dataframeB没有的行
基于name列取DataFrame差集实现方案
实现思路
以name字段为匹配键,过滤出dataframeA中name值不存在于dataframeB的name列的记录,重置索引即可得到符合要求的结果。
实现代码(pandas)
方法1:isin反向过滤(最简洁)
import pandas as pd # 构造示例数据 df_a = pd.DataFrame({"id": [1,2,3,4], "name": ["aaa", "bbbb", "cccc", "gggg"]}) df_b = pd.DataFrame({"id": [1,2,3], "name": ["ddd", "aaa", "gggg"]}) # 核心过滤逻辑 result = df_a[~df_a["name"].isin(df_b["name"])].reset_index(drop=True) # 重置结果的id列为连续从1开始的数值,匹配预期输出 result["id"] = result.index + 1 # 输出结果 print(result)
方法2:merge外连接匹配
适合需要同时保留两边更多匹配信息的场景:
df_a["flag"] = "a" df_b["flag"] = "b" # 按name外连接 merge_df = pd.merge(df_a, df_b, on="name", how="outer", suffixes=("_a", "_b")) # 筛选仅在df_a中存在的记录 result = merge_df[merge_df["flag_b"].isna()][["id_a", "name"]].rename(columns={"id_a": "id"}).reset_index(drop=True) result["id"] = result.index + 1
输出结果
运行上述代码后得到的结果和预期一致:
id name 0 1 bbbb 1 2 cccc
内容的提问来源于stack exchange,提问作者miladjurablu
相关产品推荐
相关产品推荐

