如何提取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
相关产品推荐
相关产品推荐

