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

如何按Total及分类内MIME类型Count对Pandas DataFrame排序?

自定义分组排序实现方案

需求背景

已有处理后的层级索引DataFrame bin_category_total_count_df,默认按category排序,现需调整为:

  • 整体按各category的Total计数降序排列
  • 同一category内,非Total的mime_type按Count降序排列
  • Total固定放在每个category的末尾

现有默认排序数据:

Count
 category mime_type
 1        application/x-executable         19
          application/x-pie-executable    395
          application/x-sharedlib           1
          Total                           415
 2        application/x-sharedlib         755
          Total                           755
 3        application/x-sharedlib           1
          Total                             1
 6        application/x-object            129
          Total                           129

目标排序结果:

Count
 category mime_type
 2        application/x-sharedlib         755
          Total                           755
 1        application/x-pie-executable    395
          application/x-executable         19
          application/x-sharedlib           1
          Total                           415
 6        application/x-object            129
          Total                           129
 3        application/x-sharedlib           1
          Total                             1

实现代码

核心通过Pandas的sort_values()函数,结合自定义辅助字段实现排序规则:

# 1. 提取每个category的Total值,生成映射关系
category_total = (
    bin_category_total_count_df
    .xs('Total', level='mime_type')
    ['Count']
    .rename('total_value')
)

# 2. 重置层级索引为普通列,方便添加辅助字段
temp_df = bin_category_total_count_df.reset_index()

# 3. 关联总计值并标记Total行
temp_df = temp_df.merge(category_total, on='category', how='left')
temp_df['is_total'] = temp_df['mime_type'].apply(lambda x: 1 if x == 'Total' else 0)

# 4. 按规则排序:总计值降序 → Total标记升序(Total排最后) → Count降序
temp_df = temp_df.sort_values(
    by=['total_value', 'is_total', 'Count'],
    ascending=[False, True, False]
)

# 5. 恢复层级索引,得到最终结果
sorted_df = temp_df.set_index(['category', 'mime_type'])

代码说明

  • xs('Total', level='mime_type'):快速筛选所有mime_type为Total的行,提取每个分类的总计值
  • is_total字段:用1标记Total行,排序时升序排列(0在前、1在后),确保Total固定在分类末尾
  • 排序优先级:先按分类总计值降序确定整体分组顺序,再按Total标记控制位置,最后按Count降序排列组内非Total项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:44:53