为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas Groupby 多列 - 前 N 个

Pandas Groupby 多列 - 前 N 个

茅侃侃 2021-11-02 19:05:59
我有一个有趣的!我试图找到一个重复的问题,但没有成功......我的数据框由 2013-2016 年的所有美国和领土组成,具有多个属性。>>> df.head(2)     state  enrollees  utilizing  enrol_age65  util_age65  year1  Alabama     637247     635431       473376      474334  20132   Alaska      30486      28514        21721       20457  2013>>> df.tail(2)     state               enrollees  utilizing  enrol_age65  util_age65  year214  Puerto Rico          581861     579514       453181      450150  2016215  U.S. Territories      24329      16979        22608       15921  2016我想按年份和州分组,并显示每年的前 3 个州(按“登记者”或“使用”-无关紧要)。期望输出:                                       enrollees  utilizingyear 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  utilizingyear 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  utilizingyear state                           2016 California    4516216    43658962015 California    4324304    41917042014 California    4133532    4011208我认为这可能与 GroupBy 对象的索引有关,但我不确定......任何指导将不胜感激!
查看完整描述

2 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

然后您需要对 GroupBy 对象进行排序 .sort_values('enrollees), ascending=False


查看完整回答
反对 回复 2021-11-02
  • 2 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信