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

如何按ID下元素数量降序展示pandas多级索引DataFrame

实现方法

完全可以实现,核心逻辑是先统计每个ID对应的age记录条数,将该计数作为ID层级的排序依据做降序排列,同ID下保留age的原有升序规则即可。

完整可运行代码

import pandas as pd
import io

csv_data = '''
ID,age,Year
100,75,2020
100,76,2021
200,64,2020
200,65,2021
200,66,2022
300,69,2020
300,70,2021
300,71,2022
300,72,2023
'''
df = pd.read_csv(io.StringIO(csv_data))
df = df.set_index(['ID', 'age'])

# 统计每个ID下的age条目总数
id_count = df.groupby(level='ID').size()

# 执行排序:ID按条目数降序,同ID下age按升序
sorted_df = df.sort_index(
    level=['ID', 'age'],
    key=lambda x: -x.map(id_count) if x.name == 'ID' else x
)

print(sorted_df)

输出结果

运行代码后得到的输出和预期效果完全一致:

Year
ID  age      
300 69   2020
    70   2021
    71   2022
    72   2023
200 64   2020
    65   2021
    66   2022
100 75   2020
    76   2021

逻辑说明

  • df.groupby(level='ID').size():按索引的ID层级分组,统计每个ID对应的记录行数,也就是该ID包含的age元素数量
  • sort_index的key参数:对ID层级的索引值,将其映射为对应记录数的负数,默认升序排列时,记录数越大的ID排序位置越靠前;对age层级不做转换,保持原有的数值升序排列,符合同ID下就诊年份随age递增的展示逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:15:31