如何找出原始DataFrame相比当前子集DataFrame被删除的行
实现方案
前提:使用Python Pandas库操作DataFrame
方法1:基于索引取差集(推荐,效率最高)
因为你的两个DataFrame的索引都是唯一主键UniqueID,直接操作索引即可最快得到结果:
# 提取DF1存在但DF2不存在的索引集合 deleted_ids = DF1.index.difference(DF2.index) # 从DF1中筛选对应索引的行,得到仅包含被删除行的DF3 DF3 = DF1.loc[deleted_ids].copy()
说明:该方法直接利用Pandas索引的优化特性,无需逐行对比字段值,1000行量级的计算耗时可以忽略。
方法2:全字段对比匹配(适合需要严格校验行内容的场景)
如果你担心存在索引相同但其他字段被修改的情况,可以用外连接对比整行所有字段值,确保完全一致才判定为匹配:
# 临时添加存在标记列 DF1["_flag"] = 1 DF2["_flag"] = 1 # 基于所有字段做外连接,添加匹配标记 merged_df = DF1.merge( DF2, how="outer", on=list(DF1.columns), indicator=True ) # 筛选仅在DF1中存在的行,删除临时列得到DF3 DF3 = merged_df[merged_df["_merge"] == "left_only"].drop(columns=["_merge", "_flag"]) # 清理DF1和DF2的临时标记列 DF1.drop(columns=["_flag"], inplace=True) DF2.drop(columns=["_flag"], inplace=True)
说明:该方法校验逻辑更严格,适合对数据准确性要求高的场景。
内容的提问来源于stack exchange,提问作者Sumit
相关产品推荐
相关产品推荐

