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

Pandas中merge方法原理及无共同列左连接代码解析

搞懂你的pd.merge代码运行逻辑

嘿,我来帮你拆解这段代码的运行机制——你说df和temp_df没有共同列但merge成功了,其实是reset_index()在偷偷帮你创造连接键!

核心逻辑拆解

先看你的代码:

final_df = pd.merge(df, temp_df.reset_index(), how="left").fillna(0)

我们一步步拆:

1. temp_df.reset_index()的作用

reset_index()会把temp_df原来的行索引转换成一个新的列(如果你的temp_df是分组聚合来的,原来的索引就是分组键,比如你示例里的emp,那转换后列名就是emp),同时给temp_df生成新的默认整数索引(0、1、2...)。

举个贴合你示例的例子:
假设你之前是按emp分组聚合得到temp_df:

temp_df = df.groupby('emp')['usd'].sum().rename('total_usd')

这时候temp_df是一个Series,索引是['a','b','c'],对应的值是各组usd的总和(10、18、38)。执行temp_df.reset_index()后,它会变成一个DataFrame,列是['emp', 'total_usd']——这时候emp列就和你的df里的emp列完全匹配了!

2. pd.merge的自动匹配规则

当你调用pd.merge()却不指定on/left_on/right_on这些参数时,Pandas会自动扫描两个DataFrame的列,把列名完全相同的列作为连接键。

在你的场景里,temp_df.reset_index()后生成的emp列(分组键转来的),刚好和df里的emp列同名,所以Pandas就自动用这个列做左连接了——这就是你以为没有共同列,但merge能成功的原因!

3. how="left"和fillna(0)的作用

  • how="left"表示左连接:以df的所有行为基准,把temp_df里匹配的行数据合并过来。比如df里所有emp='a'的行,都会带上temp_df里emp='a'对应的total_usd值。
  • .fillna(0)是兜底处理:如果df里出现某个emp值在temp_df里不存在(比如突然出现emp='d'),左连接后对应的total_usd会是NaN,这个方法把这些缺失值换成0,保证数据的完整性。

完整运行流程总结

  1. 把temp_df的分组索引(emp)转换成列,得到带emp列的新DataFrame;
  2. Pandas自动识别到df和新DataFrame的emp列是共同键,做左连接,把聚合值匹配到df的每一行;
  3. 把连接产生的缺失值替换为0,得到最终的final_df。

这样是不是就完全明白这段代码的运行机制啦?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:32:09