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

pandas中groupby分组后如何对多列应用apply(list)聚合为列表

实现方案

你之前的代码是分组后仅选中了B列做列表聚合,要同时聚合B、C两列,直接调整分组后的列选择和聚合逻辑即可,以下是可直接复用的写法:

最简写法

直接对需要聚合的多列统一指定聚合函数为list,代码最短、执行效率最高:

df2 = df.groupby('A', as_index=False)[['B', 'C']].agg(list)

运行后输出和目标结构完全一致:

A             B            C
0  1        [a, b]       [1, 2]
1  2  [c, d, e, f] [3, 4, 5, 6]
2  3           [g]          [7]

参数说明:

  • [['B', 'C']]:选中需要做聚合的两列,替代你之前代码里单选['B']的逻辑
  • as_index=False:让分组键A直接作为普通列输出,不需要额外调用reset_index()

灵活定制写法

如果后续不同列需要用不同的聚合规则,可以用apply返回Series的写法,扩展性更强:

df2 = df.groupby('A', as_index=False).apply(
    lambda g: pd.Series({
        'B': g['B'].tolist(),
        'C': g['C'].tolist()
    })
).reset_index(drop=True)

兼容提示:如果使用的是较旧版本的pandas,运行agg(list)出现类型报错,可以把聚合函数替换为lambda x: x.tolist(),代码修改为:

df2 = df.groupby('A', as_index=False)[['B', 'C']].agg(lambda x: x.tolist())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:06:28