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

合并含重复值的DataFrame时出现重复行的原因及解决方法

理解Pandas Merge重复行问题及解决方法

为什么会出现重复行?

Pandas的merge()默认执行内连接(inner join),当指定on='fruit'时,会对两个DataFrame中fruit列值匹配的行做笛卡尔积配对:

  • df1里apple仅1行,df2里apple也仅1行,配对后得到1行;
  • df1里orange有2行(分别对应taste='sweet'和taste='sour'),df2里orange有2行(均为price='low'),所以df1的每一行orange都会和df2的每一行orange配对,最终得到2×2=4行——这就是重复行的来源。

如何得到期望的结果?

由于df2中同一fruit对应的price完全一致,我们可以通过以下几种方式处理:

方法1:先去重再合并

先对df2按fruit列去重,保留每个fruit的唯一记录,再执行合并:

# 对df2按fruit去重,保留首个匹配行
df2_unique = df2.drop_duplicates(subset='fruit', keep='first')
# 执行合并操作
df3 = df1.merge(df2_unique, on='fruit')

执行后结果如下:

fruit  taste price
0   apple  sweet  high
1  orange  sweet   low
2  orange   sour   low

方法2:合并后去重

若不确定df2中同一fruit的price是否一致,也可以先完成合并,再按fruit和taste组合列去重:

df3 = df1.merge(df2, on='fruit').drop_duplicates(subset=['fruit', 'taste'], keep='first')

方法3:聚合df2后合并

如果df2中同一fruit存在不同price,需要提取唯一值(如首个值、均值等),可以先聚合再合并:

# 按fruit分组,取price的首个值
df2_agg = df2.groupby('fruit')['price'].first().reset_index()
df3 = df1.merge(df2_agg, on='fruit')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:35:16