Pandas Groupby 多列 - 前 N 个

我有一个有趣的!我试图找到一个重复的问题,但没有成功......


我的数据框由 2013-2016 年的所有美国和领土组成,具有多个属性。


>>> df.head(2)

     state  enrollees  utilizing  enrol_age65  util_age65  year

1  Alabama     637247     635431       473376      474334  2013

2   Alaska      30486      28514        21721       20457  2013


>>> df.tail(2)

     state               enrollees  utilizing  enrol_age65  util_age65  year

214  Puerto Rico          581861     579514       453181      450150  2016

215  U.S. Territories      24329      16979        22608       15921  2016

我想按年份和州分组,并显示每年的前 3 个州(按“登记者”或“使用”-无关紧要)。


期望输出:


                                       enrollees  utilizing

year state                                                 

2013 California                          3933310    3823455

     New York                            3133980    3002948

     Florida                             2984799    2847574

...

2016 California                          4516216    4365896

     Florida                             4186823    3984756

     New York                            4009829    3874682

到目前为止,我已经尝试了以下方法:


df.groupby(['year','state'])['enrollees','utilizing'].sum().head(3)


这仅产生 GroupBy 对象中的前 3 行:


                 enrollees  utilizing

year state                           

2013 Alabama        637247     635431

     Alaska          30486      28514

     Arizona        707683     683273

我也试过一个 lambda 函数:


df.groupby(['year','state'])['enrollees','utilizing']\

  .apply(lambda x: np.sum(x)).nlargest(3, 'enrollees')

这产生了 GroupBy 对象中绝对最大的 3:


                 enrollees  utilizing

year state                           

2016 California    4516216    4365896

2015 California    4324304    4191704

2014 California    4133532    4011208

我认为这可能与 GroupBy 对象的索引有关,但我不确定......任何指导将不胜感激!


茅侃侃
浏览 198回答 2
2回答

忽然笑

然后您需要对 GroupBy 对象进行排序 .sort_values('enrollees), ascending=False
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python