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

Pandas:如何将小DataFrame合并到大DataFrame且保持原行数?

解决DataFrame合并后行数过多的问题

你的问题出在直接用inner merge时,df2中同一columnA存在重复行,导致合并时产生了笛卡尔积(比如df1的3行data1和df2的3行data1会匹配出9行)。要实现你想要的结果,需要先对df2做去重处理,再和df1做左连接。

具体步骤:

  1. 对df2去重:因为df2中同一columnA对应的columnD和columnE值完全一致,所以可以保留每个columnA对应的唯一行。
  2. 左连接df1和去重后的df2:使用how='left'确保保留df1的所有行,同时匹配df2中对应的数据。

完整代码示例:

import pandas as pd

# 构造df1
df1 = pd.DataFrame({
    'columnA': ['data1', 'data1', 'data1', 'data2', 'data2', 'data3', 'data3'],
    'columnB': [2, 2, 2, 3, 3, 4, 4],
    'columnC': ['d', 'd', 'd', 'r', 'r', 'g', 'g']
})

# 构造df2
df2 = pd.DataFrame({
    'columnA': ['data1', 'data1', 'data1', 'data2', 'data2'],
    'columnD': ['a', 'a', 'a', 'b', 'b'],
    'columnE': ['x', 'x', 'x', 'y', 'y']
})

# 对df2按columnA去重,保留唯一的列组合
df2_unique = df2.drop_duplicates(subset=['columnA'])

# 左连接合并两个DataFrame
combined = pd.merge(df1, df2_unique, how='left', on='columnA')

print(combined)

输出结果:

columnA  columnB columnC columnD columnE
0   data1        2       d       a       x
1   data1        2       d       a       x
2   data1        2       d       a       x
3   data2        3       r       b       y
4   data2        3       r       b       y
5   data3        4       g      NaN     NaN
6   data3        4       g      NaN     NaN

这个结果和你期望的完全一致,行数和原df1相同,同时正确匹配了对应的数据,data3的缺失值会显示为NaN(和你的示例中空值效果一致)。

内容的提问来源于stack exchange,提问作者T-0

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:57:29