如何按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
相关产品推荐
相关产品推荐

