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

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_catnumber_available
1600
2200
3100
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:06:27