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

Pandas两个DataFrame取交集时pd.merge内连接结果不符合预期如何解决

Pandas 两个DataFrame取交集行数不符问题解决方案

问题根因

你得到4行输出是因为Pandas merge操作对重复匹配键会生成笛卡尔积:df1中有2条完全相同的匹配行,df2中有2条完全相同的匹配行,最终匹配结果为2*2=4行,和实际输出一致。

调整方案

方案1:新增重复行组内序号作为匹配键

该方案可以严格对齐重复行的匹配数量,最终保留的行数与df1中存在于df2的行数完全一致,适配你的需求:

import pandas as pd

df1 = pd.DataFrame([
      ['psy', 180, 75],
      ['psy', 180, 75]
], columns = ['name', 'height', 'weight'])

df2 = pd.DataFrame([
      ['psy', 180, 75],
      ['df', 160, 65],
      ['ddqq', 170, 75],
      ['psy', 180, 75]
], columns = ['name', 'height', 'weight'])

# 为两个表的重复行添加组内计数作为额外匹配键
df1['dup_count'] = df1.groupby(df1.columns.tolist()).cumcount()
df2['dup_count'] = df2.groupby(df2.columns.tolist()).cumcount()

# 合并后删除辅助计数列
result = pd.merge(df1, df2, how='inner').drop('dup_count', axis=1)
print(result)

运行输出如下:

name  height  weight
0  psy     180      75
1  psy     180      75

方案2:直接筛选df1中在df2存在的行

如果你不需要对齐右表重复行,只要df1的行在df2中出现过就保留,可以使用更简洁的写法:

result = df1[df1.apply(tuple, axis=1).isin(df2.apply(tuple, axis=1))]
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:15:05