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

如何在Pandas链式调用中使用groupby+ngroup生成分组ID?

用Pandas链式调用生成分组ID的正确方法

嘿,我来帮你搞定这个链式调用的问题!你之前尝试用agg结合NamedAgg的方式行不通,主要有两个核心原因:

  • ngroup()是Pandas分组对象的行级方法,用来给每一行分配对应的分组ID,不属于针对某列的聚合函数,所以没法用agg来调用它;
  • pd.NamedAgg的column参数只能接收单个列名,不能传入列名列表,这也是代码报错的直接原因。

正确的链式实现方式

我们可以用assign方法结合匿名函数来实现链式调用,完美替代常规的分组赋值写法:

import pandas as pd
df = pd.DataFrame({'a':[1,1,1,2,2,2],'b':[1,1,2,1,1,2]})

# 链式调用生成分组ID
df = df.assign(newID=lambda x: x.groupby(['a', 'b']).ngroup())

运行后df的结果如下:

abnewID
0110
1110
2121
3212
4212
5223

如果你更倾向于用pipe方法来实现链式调用,也可以这么写:

df = df.pipe(lambda df: df.assign(newID=df.groupby(['a', 'b']).ngroup()))

原理说明

  • assign方法允许我们在DataFrame上直接新增列,并且可以通过匿名函数lambda x引用当前的DataFrame对象;
  • 匿名函数里的x.groupby(['a', 'b']).ngroup()和你常规写法里的逻辑完全一致,会根据a和b的组合生成唯一的分组ID,顺序是按分组的出现顺序排列的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:17:38