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

如何基于指定列对DataFrame df1与df2执行左连接(left join)

在Pandas中用左连接关联两个DataFrame的具体方法

嗨,我来帮你把这个左连接操作讲得明明白白~ 你提到想用df1.merge(df2, how='left')实现左连接,但因为两个DataFrame的关联列名不一样(df1是user_id,df2是id),直接这么写的话Pandas找不到匹配的关联键,要么报错,要么得到不符合预期的结果,所以得明确指定关联的列才行。

核心逻辑先理清楚

左连接的核心是保留左表(也就是df1)的所有行,然后匹配右表(df2)中对应的数据;如果右表没有找到匹配的记录,对应列就会填充为NaN。

正确的代码写法

你需要用left_on参数指定df1的关联列,right_on参数指定df2的关联列,完整代码如下:

merged_df = df1.merge(df2, how='left', left_on='user_id', right_on='id')

参数解释:

  • how='left':明确告诉Pandas这是左连接,以df1为基准保留所有行
  • left_on='user_id':指定df1中用来关联的列是user_id
  • right_on='id':指定df2中用来关联的列是id

优化小技巧

如果关联后觉得id和user_id列重复冗余,可以删掉其中一列,比如去掉df2的id列:

merged_df = merged_df.drop('id', axis=1)

举个直观的例子

假设你的df1是这样的:

user_idusername
1Alice
2Bob
3Charlie

df2是这样的:

idagecity
125New York
230London

执行左连接后得到的merged_df会是:

user_idusernameidagecity
1Alice125New York
2Bob230London
3CharlieNaNNaNNaN

可以看到,Charlie在df2里没有对应的id记录,所以df2的列都填充了NaN,但df1里的所有行都被完整保留了。

注意事项

  • 如果user_id或id列存在重复值,merge会生成笛卡尔积(也就是每一组匹配的组合都会保留),如果不需要这种结果,可以先对重复值做去重处理:df1 = df1.drop_duplicates(subset='user_id')
  • 确保两个关联列的数据类型一致(比如都是整数或字符串),否则可能出现匹配失败的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:01:42