如何对多级索引的Pandas DataFrame按两级不同规则排序?
实现多级索引DataFrame的自定义排序需求
数据构造
首先是构造目标多级索引DataFrame的代码:
import pandas as pd df2 = pd.DataFrame({ "word" : ["AA", "AC", "AC", "BA", "BB", "BB", "BB"], "letter1": ["A", "A", "A", "B", "B", "B", "B"], "letter2": ["A", "C", "C", "A", "B", "B", "B"] }) df_counts = df2[["word", "letter1", "letter2"]].groupby(["letter1", "letter2"]).count()
需求描述
需要完成两层排序逻辑:
- 外层按
letter1分组的总数据量降序排列(letter1=B的组共4条数据,需排在letter1=A组之前) - 内层在每个
letter1分组内,按word列的计数值降序排列
期望输出结果:
word letter1 letter2 B B 3 A 1 A C 2 A 1
实现方法
可以实现,具体步骤如下:
- 计算每个
letter1分组的总记录数,添加为辅助列; - 基于辅助列和原
word列的计数值进行多级排序; - 移除辅助列,得到最终结果。
对应代码:
# 计算每个letter1分组的总数,合并到原DataFrame df_counts = df_counts.join( df_counts.groupby(level='letter1').sum().rename(columns={'word': 'group_total'}) ) # 先按分组总数降序,再按word计数值降序排序,最后删除辅助列 df_counts = df_counts.sort_values( by=['group_total', 'word'], ascending=False ).drop(columns='group_total') # 确保层级索引顺序正确(可选,原索引层级已正确时可省略) df_counts = df_counts.reorder_levels(['letter1', 'letter2'])
执行上述代码后,即可得到符合预期的排序结果。
内容的提问来源于stack exchange,提问作者butterflyknife
相关产品推荐
相关产品推荐

