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

如何在Pandas中分组求和后排序并计算累积占比达标ID的占比

实现需求的最优方法

咱们从已经得到的df_1出发,一步步完成你要的两个需求:

步骤1:按year_month分组,每组内pct降序排序

直接用sort_values就能轻松搞定,指定先按year_month升序、再按pct降序排列,这样每个月份内的记录就会按占比从高到低排好:

# 按月份分组后对pct降序排序
df_sorted = df_1.sort_values(['year_month', 'pct'], ascending=[True, False])

步骤2:计算每个月内累积pct≤80的id占比

这一步咱们用链式操作来简化代码,效率也更高:

result = (df_sorted
          # 按月份分组,给每个组添加累积占比列
          .groupby('year_month')
          .apply(lambda x: x.assign(cum_pct=x['pct'].cumsum()))
          .reset_index(drop=True)
          # 按月份分组,统计符合条件的id数和当月总id数
          .groupby('year_month')
          .agg(
              valid_count=('id', lambda x: x[x['cum_pct'] <= 80].count()),
              total_count=('id', 'count')
          )
          # 计算占比并转成百分比格式
          .assign(pct=lambda x: (x['valid_count'] / x['total_count']).mul(100).astype(str) + '%')
          # 转成你要的横向结果格式
          ['pct']
          .to_frame()
          .T
)

运行后result就会输出你期望的格式:

201903 201904
pct      25%    50%

代码小说明

  • 排序后用groupby.apply给每个月份组生成累积占比列cum_pct;
  • 再次按月份分组,分别统计符合条件的id数量和当月总id数;
  • 计算占比后转成带百分号的字符串,最后转置成横向展示的结果。

这种链式操作既清晰又高效,避免了过多中间变量,也充分利用了Pandas的向量化运算特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:43:41