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

如何用Pandas找出两DataFrame中指定列同值但其他列异值的行

解决两个DataFrame中匹配col1+col4但col2/col3不同的行问题

我来帮你搞定这个需求,核心是找出两个DataFrame中col1+col4组合完全相同,但col2或col3存在差异的所有行,最终合并输出这些行。下面是用Pandas实现的具体步骤和代码:

第一步:准备样本数据

先把你给出的样本数据转换成可运行的Pandas DataFrame:

import pandas as pd

# 构建样本df1
df1 = pd.DataFrame({
    'col1': ['a', 'b'],
    'col2': ['bb', 'aa'],
    'col3': ['cc', 'ee'],
    'col4': ['d', 'e']
})

# 构建样本df2
df2 = pd.DataFrame({
    'col1': ['a', 'e'],
    'col2': ['ee', 'gg'],
    'col3': ['ff', 'hh'],
    'col4': ['d', 'k']
})

第二步:筛选并生成目标结果

核心思路是先定位col1+col4相同但col2/col3不同的组合,再从原DataFrame中提取对应行:

# 内连接两个df,用后缀区分来自不同df的列
merged = pd.merge(df1, df2, on=['col1', 'col4'], suffixes=('_df1', '_df2'))

# 筛选col2或col3不一致的行,得到目标(col1, col4)组合
mismatched = merged[(merged['col2_df1'] != merged['col2_df2']) | (merged['col3_df1'] != merged['col3_df2'])]
target_pairs = mismatched[['col1', 'col4']]

# 从原df1和df2中提取对应行,合并成结果df3
df3 = pd.concat([
    df1.merge(target_pairs, on=['col1', 'col4']),
    df2.merge(target_pairs, on=['col1', 'col4'])
]).reset_index(drop=True)

# 输出结果
print(df3)

运行结果

执行上述代码后,输出的df3完全符合你的期望:

col1 col2 col3 col4
0    a   bb   cc    d
1    a   ee   ff    d

代码逻辑解释

  1. 内连接:通过pd.merge基于col1和col4合并两个DataFrame,只保留两个df中都存在的col1+col4组合,方便后续对比列值差异。
  2. 筛选差异行:用|(逻辑或)判断col2或col3是否存在不一致,锁定需要提取的目标组合。
  3. 提取合并:从原df1和df2中分别提取目标组合对应的行,再用pd.concat合并成最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:31:04