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

如何用Pandas的groupby和value_counts生成DataFrame的Count列?

问题:为DataFrame按分组添加颜色出现次数列

现有如下示例DataFrame:

Type    Color
A       Blue    
A       Orange 
A       Green   
A       Green   
A       Red    
A       Red     
A       Red     
B       Blue    
B       Orange  
B       Green   
B       Green   
B       Red     
B       Red     
B       Red     
C       Blue    
C       Orange  
C       Green   
C       Green   
C       Red     
C       Red     
C       Red     
D       Blue    
D       Orange  
D       Green   
D       Green   
D       Red     
D       Red     
D       Red     
E       Blue    
E       Orange  
E       Green   
E       Green   
E       Red     
E       Red     
E       Red     

需要新增名为Count的列,统计每个Type分组内对应Color的出现次数,最终效果如下:

Type    Color   Count
A       Blue    1
A       Orange  1
A       Green   2
A       Green   2
A       Red     3
A       Red     3
A       Red     3
B       Blue    1
B       Orange  1
B       Green   2
B       Green   2
B       Red     3
B       Red     3
B       Red     3
C       Blue    1
C       Orange  1
C       Green   2
C       Green   2
C       Red     3
C       Red     3
C       Red     3
D       Blue    1
D       Orange  1
D       Green   2
D       Green   2
D       Red     3
D       Red     3
D       Red     3
E       Blue    1
E       Orange  1
E       Green   2
E       Green   2
E       Red     3
E       Red     3
E       Red     3

尝试使用代码df.groupby(['Type', 'Color']).value_counts()时,无法生成新列,赋值还会出现索引错误,求正确实现方法。


解决方案

方法1:使用groupby + transform(推荐)

transform方法会将分组计算的结果广播到原DataFrame的每一行,自动匹配索引,不会出现错误。代码如下:

# 用transform('count')实现
df['Count'] = df.groupby(['Type', 'Color'])['Color'].transform('count')

# 或使用transform('size'),效果完全一致
df['Count'] = df.groupby(['Type', 'Color'])['Color'].transform('size')

方法2:分组统计后合并回原表

先计算每个Type+Color组的计数,再通过merge合并到原DataFrame:

# 第一步:计算分组计数并转为DataFrame
count_df = df.groupby(['Type', 'Color']).size().reset_index(name='Count')

# 第二步:合并到原表
df = df.merge(count_df, on=['Type', 'Color'], how='left')

两种方法都能得到需求中的结果,其中方法1更简洁高效,不需要额外的合并操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 15:23:19