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

如何提取Output DataFrame中与Original无匹配的独有行?

Pandas 解决方案

以下是两种可行的Pandas方法,可提取output中不存在于original的行:

方法1:使用merge结合indicator

通过左连接两个DataFrame,并利用indicator标记行的来源,筛选仅存在于output的行:

import pandas as pd

original = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
output = pd.DataFrame({'A': [1, 2, 4,9], 'B': [4, 5, 7,8]})

# 左连接并标记行来源
merged = pd.merge(output, original, on=['A', 'B'], how='left', indicator=True)
# 筛选仅存在于output的行并移除标记列
new_rows = merged[merged['_merge'] == 'left_only'].drop('_merge', axis=1)
print(new_rows)

输出结果:

A  B
2  4  7
3  9  8

方法2:通过元组集合匹配整行

将DataFrame的行转换为元组,利用集合快速判断整行是否存在:

import pandas as pd

original = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
output = pd.DataFrame({'A': [1, 2, 4,9], 'B': [4, 5, 7,8]})

# 将original的行转换为元组集合
original_rows = set(original.itertuples(index=False, name=None))
# 筛选output中不在original的行
new_rows = output[~output.itertuples(index=False, name=None).isin(original_rows)]
print(new_rows)

输出结果与方法1一致。

PySpark 解决方案

使用PySpark的left_anti连接,直接获取output中无匹配的行:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("CompareDFs").getOrCreate()

original = spark.createDataFrame([(1,4), (2,5), (3,6)], ["A", "B"])
output = spark.createDataFrame([(1,4), (2,5), (4,7), (9,8)], ["A", "B"])

# left_anti连接返回output中独有的行
new_rows = output.join(original, on=["A", "B"], how="left_anti")
new_rows.show()

输出结果:

+---+---+
|  A|  B|
+---+---+
|  4|  7|
|  9|  8|
+---+---+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:58:18