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

Pandas 1.x与2.x中groupby重复索引差异及group_keys参数疑问

Pandas 1.x与2.x中groupby+apply的group_keys行为差异解析

下面是一段测试Pandas中groupby结合apply时group_keys参数行为的代码,在Pandas 1.3和2.2版本中输出结果存在明显差异:

df = pd.DataFrame({'group': ['A', 'A', 'B', 'B'], 'value': [1, 2, 3, 4]}).set_index(['group'])
print(df.groupby(level='group', group_keys=True).apply(lambda x: x))
print(df.groupby(level='group', group_keys=False).apply(lambda x: x))

输入的初始DataFrame结构如下:

value
group       
A          1
A          2
B          3
B          4

版本差异表现

Pandas 1.x(以1.3为例)

无论group_keys设为True还是False,返回结果都仅保留名为group的单一级别索引:

value
group       
A          1
A          2
B          3
B          4

Pandas 2.x(以2.2为例)

  • 当group_keys=True时,结果出现重复的group多级索引:
value
group group       
A     A          1
      A          2
B     B          3
      B          4
  • 当group_keys=False时,结果仍为单一级别索引,与1.x版本行为一致:
value
group       
A          1
A          2
B          3
B          4

行为差异的核心原因

从group_keys参数的定义来看,它用于控制是否将分组键添加到结果的索引中。Pandas 2.x的行为更贴合参数的字面含义:

  • 原DataFrame已经将group设为索引,当group_keys=True时,apply会额外将分组键作为顶层索引添加,从而形成重复的多级索引;
  • group_keys=False时则不会额外添加分组键,因此结果保留原单一级别索引。

而Pandas 1.x存在一个隐式的处理逻辑:当检测到分组键与原DataFrame的索引名称重复时,会自动跳过添加分组键的操作,避免生成重复索引。这个行为在早期版本中属于未明确文档化的“隐式兼容”处理,在2.x版本中被移除,目的是让group_keys的行为更严格符合参数定义,减少隐式行为带来的混淆。

虽然这个变更可能未在版本变更文档中单独突出说明,但它属于Pandas 2.x对groupby模块行为一致性优化的一部分——让参数行为更直观、更少依赖隐式规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 10:11:16