Pandas groupby保留非分组列问题求助
解决Pandas Groupby后保留多余列的问题
方法1:用size()替代count()
size()直接返回每个分组的总行数,不会生成多余列,返回结果是Series,可通过reset_index()转成DataFrame并重命名计数列:
result = df.groupby(['org_id', 'inspection'], dropna=False).size().reset_index(name='count')
最终结果如下:
| org_id | inspection | count |
|---|---|---|
| 111 | TRUE | 2 |
| 222 | FALSE | 1 |
| 333 | FALSE | 1 |
| 111 | FALSE | 1 |
| 222 | TRUE | 2 |
| 333 | TRUE | 2 |
方法2:指定单列执行count()
如果坚持使用count(),可以选择某一列(比如person_id)单独计数,避免生成多余列:
result = df.groupby(['org_id', 'inspection'], dropna=False)['person_id'].count().reset_index(name='count')
方法3:用agg()明确定义聚合逻辑
通过agg()方法可以灵活指定计数列的名称和计算方式:
result = df.groupby(['org_id', 'inspection'], dropna=False).agg(count=('person_id', 'count')).reset_index()
问题根源
你之前使用df.groupby(...).count()时,count()会对所有非分组列分别统计非空值数量,因此保留了person_id和date列。而你需要的是分组后的总行数,size()更贴合需求,指定单列计数也能达到目的。
内容的提问来源于stack exchange,提问作者simplycoding
相关产品推荐
相关产品推荐

