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

Pandas中如何让nth()作聚合器?求简洁兼容新旧版本的方案

Pandas 新旧版本兼容的 groupby.nth() 索引保持方案

核心问题

Pandas v1.x.x 中df.groupby("col").nth(0)会自动将分组列col设为结果的索引;但v2.x.x中nth()被归类为过滤器,默认不再将分组列作为索引。原方案df.groupby("col").nth(0).reset_index().set_index("col")需要重复指定列名,不够简洁。

简洁兼容方案

方案1:动态判断列是否存在,一行式兼容

利用pipe和lambda表达式动态处理,仅在分组列存在于结果列中时设置为索引,无需重复写列名:

df.groupby("col").nth(0).pipe(lambda res: res.set_index("col") if "col" in res.columns else res)
  • 逻辑:Pandas 1.x的结果中col是索引,不在列列表里,直接返回原结果;2.x的结果中col是普通列,将其设为索引,对齐1.x的行为。

方案2:指定groupby的as_index=True参数

显式指定as_index=True,强制在两个版本中都将分组列设为索引:

df.groupby("col", as_index=True).nth(0)
  • 注意:该方案依赖Pandas对as_index参数的一致性处理,目前在1.x和2.x中均生效。

方案3:用head(1)替代nth(0)(效果等价场景)

若仅需获取每组第一行,head(1)在新旧版本中配合as_index=True的行为完全一致,写法更简洁:

df.groupby("col", as_index=True).head(1)
  • 适用场景:组内排序逻辑固定,nth(0)与head(1)取行结果一致时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:42:18