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

Pandas多级索引数据按索引与值排序:年度消息量Top3求解

解决方法

咱们一步步来搞定这个需求,你已经完成了分组计数的第一步,剩下的排序和筛选操作很简单:

步骤1:分组计数后按规则排序

先把分组后的结果按年份升序、同一年份内消息量降序排序,直接用sort_values就能实现:

import pandas as pd

# 你的原始数据
data = {
    'year': [2018,2017,2019,2017,2017,2020,2020,2020,2020],
    'month': [2,4,5,5,5,4,6,6,6],
    'message': ['txt1','txt2','txt3','txt5','txt4','txt3','txt3','txt3','txt4']
}
df = pd.DataFrame(data)

# 你已经完成的分组计数操作
count_df = df.groupby(['year', 'month']).count()

# 按年份升序、消息量降序排序
sorted_count = count_df.sort_values(by=['year', 'message'], ascending=[True, False])

步骤2:提取每年消息量Top3的月份

接下来对每个年份分组,提取每组的前3条数据(如果某年份不足3个月份,就自动保留所有数据):

top3_per_year = sorted_count.groupby(level='year').head(3)

调整显示格式(匹配你要的样式)

最后设置pandas的显示参数,让多级索引里的重复年份只显示一次,就能得到你想要的缩进效果:

pd.set_option('display.multi_sparse', True)
print(top3_per_year)

运行后输出和你要的结果完全一致:

message
year month         
2017 5            2
     4            1
2018 2            1
2019 5            1
2020 6            3
     4            1

小补充

  • level='year'是因为分组后是多级索引(year和month),指定层级就能直接按年份筛选。
  • display.multi_sparse参数默认是开启的,但如果你的环境里没生效,手动设置一下就能让相同的上层索引自动隐藏重复值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:22:32