Pandas分组统计:如何合并大于阈值的分组并求和,保留小分组独立计数
实现方案
首先注意两个前置处理要点:
- 示例数据里
count_category和number_available都是字符串类型,聚合求和前必须先把number_available转为整数/浮点数值类型,否则会出现字符串拼接的错误结果 - 先对
count_category做值映射:所有取值大于等于4的项统一归为4+分组,取值1/2/3的项保留原有分类,再做聚合即可。
从原始DataFrame直接处理的完整代码
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'count_category': ['1','2','3','4','5'], 'number_available': ['600','200','100','50','25'], }) # 字段类型转换 df['number_available'] = df['number_available'].astype(int) # 映射生成分组字段 df['group_cat'] = df['count_category'].apply(lambda x: '4+' if int(x) >= 4 else x) # 聚合计算 result = df.groupby('group_cat', as_index=False)['number_available'].sum() # 可选:保持1、2、3、4+的自然排序 result['sort_tmp'] = result['group_cat'].str.replace('+', '', regex=False).astype(int) result = result.sort_values('sort_tmp').drop('sort_tmp', axis=1).reset_index(drop=True)
运行后得到的result结果如下,完全符合预期:
| group_cat | number_available |
|---|---|
| 1 | 600 |
| 2 | 200 |
| 3 | 100 |
| 4+ | 75 |
基于已生成的初步分组结果二次处理
如果你已经运行了最初的分组计数代码得到了中间结果,不需要回到原始表重跑,可以直接对分组后的结果做处理:
# 已有的初步分组结果 grouped_df = orig_df.groupby(['count_category'])['number_available'].count().reset_index() # 类型转换+分组映射+聚合 grouped_df['number_available'] = grouped_df['number_available'].astype(int) grouped_df['group_cat'] = grouped_df['count_category'].apply(lambda x: '4+' if int(x) >= 4 else x) result = grouped_df.groupby('group_cat', as_index=False)['number_available'].sum() # 排序逻辑和上面一致
内容的提问来源于stack exchange,提问作者SoSincere3
相关产品推荐
相关产品推荐

