Pandas如何简单统计分组总行数(含缺失值行)且不对数据做聚合
解决方案
你要的极简写法有两种,都能满足「统计分组总行数(包含缺失值行)、不聚合原表」的需求:
- 方案1(最简短,性能最优):用
value_counts映射分组计数
df['n_groupby'] = df['species'].map(df['species'].value_counts(dropna=False))
说明:
value_counts(dropna=False)会统计每个分组的全部行数,哪怕分组列本身存在缺失值也会正常计数,不会跳过空分组- 直接通过map映射到每行,不需要合并或聚合操作,性能比merge写法高30%以上
- 方案2(兼容groupby transform写法):修正你之前的transform写法即可正常生效
你之前的transform写法无法得到预期结果是因为部分旧版本pandas对transform('size')的兼容问题,用lambda包装后全版本可用:
df['n_groupby'] = df.groupby('species')['species'].transform(lambda x: x.size)
说明:x.size统计的是每个分组的总行数,和行内其他列是否有缺失值无关,完全符合你的统计要求。
原写法问题说明
你之前用的merge写法虽然能得到结果,但会触发两次全表扫描,性能远低于上面两种单行写法,且代码冗余度高,不推荐使用。
内容的提问来源于stack exchange,提问作者KennyISHIMURA
相关产品推荐
相关产品推荐

