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

如何对Pandas分组DataFrame执行左连接?合并groupby对象遇KeyError

问题分析与解决方法

嘿,这个坑我之前踩过!你遇到的KeyError: 'Month'核心原因很明确:你直接拿groupby对象去执行合并操作了,但df_archives_gb并不是一个可直接用于合并的DataFrame——它只是一个存储分组规则的中间对象,哪怕你知道它包含Month和Bucket作为分组键,这些键在groupby对象里是索引(或者说分组标识),而非普通的DataFrame列,所以pd.merge找不到对应的列名。

解决步骤

要解决这个问题,你需要先把groupby对象转换成标准的DataFrame,再执行合并:

  1. 对groupby对象执行聚合(或展开)操作,生成DataFrame
    首先你得明确分组后需要保留什么数据:

    • 如果是需要分组聚合结果(比如求和、均值、计数):
      举个例子,假设你要按Month和Bucket分组后计算某列的总和:

      # 先聚合,再用reset_index()把分组键转回普通列
      df_archives = df_archives_gb.sum().reset_index()
      

      这里的reset_index()是关键!聚合后的分组键(Month、Bucket)会默认成为DataFrame的索引,必须用这个方法把它们变回普通列,才能和df_output_pacer的列对应上。

    • 如果是需要保留分组后的所有原始数据(不做聚合):
      可以用apply把每个分组转回DataFrame,再合并:

      df_archives = df_archives_gb.apply(lambda x: x).reset_index(drop=True)
      
  2. 执行左连接操作
    现在用转换后的df_archives去和df_output_pacer合并:

    df_comparer = pd.merge(df_output_pacer, df_archives, how='left', on=['Month', 'Bucket'])
    

额外验证小技巧

你可以在转换前先打印df_archives_gb.sum()(或者你用的聚合方法)的结构,就能清楚看到Month和Bucket是索引而非列——这就是合并时找不到键的根本原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:55:05