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

Pandas分组后保留所有行列并添加分组计数列的问题及替代方案

解决方法

首先,你之前用transform('count')没得到预期结果,大概率是因为count会忽略缺失值,换成transform('size')更可靠——它会统计每组的总行数(不管是否有缺失值)。另外注意你提到的分组列Assoc_ID在给出的DataFrame输出里不存在,是不是把ID1/ID2写错了?以下是几种可行方案:

方案1:用transform+size(最简洁)

假设你实际要分组的是ID1、SRA_2、Prd_Name(如果确实有Assoc_ID列,替换成对应列名即可):

df['Cnt'] = df.groupby(['ID1', 'SRA_2', 'Prd_Name'])['ID1'].transform('size')

方案2:分组统计后左连接

先单独统计每组计数,再通过左连接合并回原DataFrame,确保保留所有行:

# 先统计每组数量
group_counts = df.groupby(['ID1', 'SRA_2', 'Prd_Name']).size().reset_index(name='Cnt')
# 左连接合并,保留原表所有行
df = df.merge(group_counts, on=['ID1', 'SRA_2', 'Prd_Name'], how='left')

方案3:用索引映射

先生成分组计数的映射表,再通过索引匹配赋值:

# 生成分组到计数的映射
count_mapping = df.groupby(['ID1', 'SRA_2', 'Prd_Name']).size()
# 将原表的分组列设为索引,映射后恢复原索引
df['Cnt'] = df.set_index(['ID1', 'SRA_2', 'Prd_Name']).index.map(count_mapping.get)
df = df.reset_index(drop=True)

关键说明

  • size vs count:size统计每组的总行数,包含缺失值;count仅统计非NaN的行数,如果你分组列或统计列存在空白/NaN,两者结果会不同,这很可能是你之前失败的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:20:08