开发者社区> 问答> 正文

在Pandas数据框的多索引数据中按索引和值排序

假设我有一个数据框,如下所示:

    year    month   message
0   2018    2   txt1
1   2017    4   txt2
2   2019    5   txt3
3   2017    5   txt5
4   2017    5   txt4
5   2020    4   txt3
6   2020    6   txt3
7   2020    6   txt3
8   2020    6   txt4

我想弄清楚每年的前三大邮件数量。因此,我将数据分组如下:

df.groupby(['year','month']).count()

结果:

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

两个索引的数据都按升序排列。但是如何找到如下所示的结果,其中数据按年份(升序)和前n个值的计数(降序)排序。“月”指数将免费。

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

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 19:29:54 492 0
1 条回答
写回答
取消 提交回答
  • value_counts默认给你排序:

    df.groupby('year')['month'].value_counts()
    

    输出:

    year  month
    2017  5        2
          4        1
    2018  2        1
    2019  5        1
    2020  6        3
          4        1
    Name: month, dtype: int64
    

    如果您每年只需要2个最高价值,则进行另一个groupby:

    (df.groupby('year')['month'].value_counts()
       .groupby('year').head(2)
    )
    

    输出:

    year  month
    2017  5        2
          4        1
    2018  2        1
    2019  5        1
    2020  6        3
          4        1
    Name: month, dtype: int64
    

    回答来源:stackoverflow

    2020-03-24 19:30:08
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
中文:即学即用的Pandas入门与时间序列分析 立即下载
即学即用的Pandas入门与时间序列分析 立即下载
低代码开发师(初级)实战教程 立即下载