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

如何实现左连接大表且保持左表规模?Pandas实操问题

按ID关联DataFrame并保留原表规模的解决方法

你需要用**左连接(left join)**来实现这个需求,核心是指定合并方式为how='left',同时确保右侧表(dataframe2)的id列无重复值(你的示例数据里已经满足),这样合并后会完全保留dataframe1的行数,只匹配对应id的type字段。

代码实现

import pandas as pd

# 构造你的示例数据
dataframe1 = pd.DataFrame({
    'id': ['a1', 'a1', 'a2'],
    'val': [0, 5, 3]
})

dataframe2 = pd.DataFrame({
    'id': ['a1', 'a2', 'a3', 'a4'],
    'type1': ['main', 'secondary', 'old', 'deleted'],
    'type2': ['k', 'b', 'k', 'n']
})

# 执行左连接合并
result_df = pd.merge(dataframe1, dataframe2, on='id', how='left')

print(result_df)

输出结果

id  val      type1 type2
0  a1    0       main     k
1  a1    5       main     k
2  a2    3  secondary     b

为什么之前合并后规模变大?

如果之前用了默认的how='inner'(内连接),在你的示例数据里结果行数应该和左连接一致,但如果dataframe2里存在重复的id,就会导致合并后行数翻倍甚至更多。可以先检查dataframe2的id是否重复:

# 检查id列是否有重复值
print(dataframe2['id'].duplicated().any())

如果输出True,先对dataframe2去重再合并:

# 保留每个id的第一行记录
dataframe2 = dataframe2.drop_duplicates(subset='id', keep='first')

处理完再执行左连接,就能得到和dataframe1规模完全一致的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:12:22