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

Pandas 0.16.2版本groupby聚合agg(list)不生效的解决方法

Pandas 0.16.2版本分组聚合为列表的实现方案

问题场景

工作环境Python依赖版本受限,必须使用Pandas 0.16.2版本。高版本Pandas支持的df.groupby(category).agg(list)写法在该版本无法运行,需要实现分组后将同组各列取值聚合为列表的效果。

待处理的原始DataFrame结构:

Type            Cost
0   Food - Type A   1.50
1   Food - Type B   2.20
2   Car - Type A    1.30
3   Car - Type B    2.40
4   Car - Type C    3.70

预处理生成分组键的代码:

category = df['Type'].str.split(' -', expand=True)[0]

分组键输出结果:

0    Food
1    Food
2    Car
3    Car
4    Car

目标聚合效果:

Type                                 Cost
Food    [Food - Type A, Food - Type B]             [1.5, 2.2]
Car     [Car - Type A, Car - Type B, Car - Type C] [1.3, 2.4, 3.7]

兼容旧版本的实现方法

Pandas 0.16.2的agg方法未适配直接传入内置list对象的逻辑,可通过以下两种方式实现同等效果:

  • 方案1:逐列应用列表聚合后拼接(稳定性最高)
    先创建分组对象,对每一列单独调用apply(list)完成聚合,最后沿列方向拼接所有列的聚合结果,代码如下:

    import pandas as pd
    group_obj = df.groupby(category)
    result = pd.concat([group_obj[col].apply(list) for col in df.columns], axis=1)
    

    该写法完全适配0.16.2版本的API规则,不会触发类型校验问题,运行结果和高版本agg(list)完全一致。

  • 方案2:用lambda表达式包装列表转换逻辑
    如果希望保持单句agg的写法,可以传入lambda表达式显式将分组序列转为列表:

    result = df.groupby(category).agg(lambda x: list(x))
    

    提示:该写法在DataFrame存在混合类型列时可能触发旧版本的类型校验报错,生产环境优先使用方案1。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:54:21