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

Pandas GroupBy分组后如何为DataFrame新增聚合计算列

Pandas 分组新增聚合列实现方案

失败原因

原代码赋值失败核心有3个问题:

  • groupby直接聚合的结果以分组字段key为索引,和原DataFrame的逐行索引不匹配,直接赋值会出现索引对齐错误,生成大量空值
  • 聚合后调用reset_index()会返回行数等于分组数的新DataFrame,和原表行数不一致,直接赋值会触发长度不匹配报错
  • 代码中部分位置字段名写为cfop,和需求指定的统计字段cfop_code不一致,会触发字段不存在错误

正确代码

使用groupby.transform实现,该方法会自动把聚合结果按原表行索引映射回每一行,无需额外对齐、合并操作:

import pandas as pd

# 存储每个分组下cfop_code的去重值列表
df['unique_list'] = df.groupby('key')['cfop_code'].transform(lambda x: x.unique().tolist())

# 统计每个分组下cfop_code的去重值数量
df['unique_count'] = df.groupby('key')['cfop_code'].transform('nunique')

# 统计每个分组下cfop_code的总记录数(非去重计数)
df['not_unique_count'] = df.groupby('key')['cfop_code'].transform('size')

可选调整

  • 如果需要unique_list存储集合类型而非列表,把代码里的.tolist()替换为set(x)即可
  • 如果不需要在原明细表保留聚合结果,只需要分组维度的统计结果,可以直接用agg一次性生成三个字段,对应代码如下:
grouped_stat = df.groupby('key').agg(
    unique_list=('cfop_code', lambda x: x.unique().tolist()),
    unique_count=('cfop_code', 'nunique'),
    not_unique_count=('cfop_code', 'size')
).reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:57:15