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

如何用Python的Pandas对比两个CSV时输出全部缺失重复行

问题与解决方案

需求

对比两个CSV文件,二者数据几乎一致,但第二个CSV包含两行第一个CSV没有的重复行,需要输出第二个CSV中所有独有的行(保留重复次数),同时可额外统计这些行的出现次数。

原代码问题

原代码将DataFrame的行转成集合(set),而集合会自动去重,导致无论第二个CSV中有多少重复的独有行,最终只能得到一次结果,无法保留重复次数。

原代码:

import csv
import pandas as pd
import numpy as np

data1 = {"Col1": [0,1,1,2],
         "Col2": [1,2,2,3],
         "Col3": [5,2,1,1],
         "Col4": [1,2,2,3]}

data2 = {"Col1": [0,1,1,2,4,4],
         "Col2": [1,2,2,3,4,4],
         "Col3": [5,2,1,1,4,4],
         "Col4": [1,2,2,3,4,4]}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

ds1 = set(tuple(line) for line in df1.values)
ds2 = set(tuple(line) for line in df2.values)
df = pd.DataFrame(list(ds2.difference(ds1)), columns=df2.columns)

print(df)

当前运行结果:

Col1  Col2  Col3  Col4
0     4     4     4     4

期望结果:

Col1  Col2  Col3  Col4
0     4     4     4     4
1     4     4     4     4

修改后的代码

方法1:保留所有重复的独有行

通过将每行转为元组,判断是否存在于第一个DataFrame中,筛选出所有独有行:

import pandas as pd

data1 = {"Col1": [0,1,1,2],
         "Col2": [1,2,2,3],
         "Col3": [5,2,1,1],
         "Col4": [1,2,2,3]}

data2 = {"Col1": [0,1,1,2,4,4],
         "Col2": [1,2,2,3,4,4],
         "Col3": [5,2,1,1,4,4],
         "Col4": [1,2,2,3,4,4]}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

# 生成每行的元组,判断df2的行是否不在df1中
row_mask = ~df2.apply(tuple, axis=1).isin(df1.apply(tuple, axis=1))
# 筛选出所有独有的行(含重复)
unique_rows = df2[row_mask]

print(unique_rows)

运行结果与期望一致:

Col1  Col2  Col3  Col4
4     4     4     4     4
5     4     4     4     4

方法2:额外统计独有行的出现次数

如果需要统计每个独有行的出现次数,可以在上述基础上添加value_counts:

# 统计每个独有行的出现次数
count_result = unique_rows.value_counts().reset_index(name='出现次数')
print(count_result)

运行结果:

Col1  Col2  Col3  Col4  出现次数
0     4     4     4     4       2

核心逻辑说明

  • 避免使用集合去重,改用apply(tuple, axis=1)将每行转为唯一标识的元组
  • 通过isin判断df2的行是否存在于df1中,取反后筛选出所有独有行
  • value_counts可以快速统计重复行的出现次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:15:29