У меня есть забавный!И я попытался найти повторяющийся вопрос, но безуспешно ...
Мой фрейм данных состоит из всех Соединенных Штатов и территорий за 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
Я хочу сгруппировать по году и штату и показать три верхних штата (по количеству «зачисленных» или «использующих» - не имеет значения) для каждого года.
Желаемый результат:
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)
, что дает только первые 3 строки в объекте GroupBy:
enrollees utilizing
year state
2013 Alabama 637247 635431
Alaska 30486 28514
Arizona 707683 683273
Я также пробовал лямбда-функцию:
df.groupby(['year','state'])['enrollees','utilizing']\
.apply(lambda x: np.sum(x)).nlargest(3, 'enrollees')
, которая дает абсолютную наибольшую 3 в объекте GroupBy:
enrollees utilizing
year state
2016 California 4516216 4365896
2015 California 4324304 4191704
2014 California 4133532 4011208
Я думаю, что это может потребоватьсяделать с индексированием объекта GroupBy, но я не уверен ... Любое руководство будет оценено!