假设我有一个数据框,如下所示:
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
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。