Вопрос 1:
df.sort_values(['Population2010'], ascending=False)\
.reindex(sorted(df.index.get_level_values(0).unique()), level=0)
или
df.sort_values('Population2010', ascending=False)\
.sort_index(level=0, ascending=[True])
Выход:
Population2010
State County
AL Douglas 92082
Baldwin 90332
Rolling 52000
AZ Maricopa 2239378
Pima 1000564
Pinal 448888
CA Los Angeles 12123562
San Diego 4364594
Orange 3879602
CO Denver 737728
Jefferson 222368
Boulder 161818
Сначала сортируйте весь фрейм данных по убыванию значений, затем извлекайте значения из индекса для уровня = 0, сортируйте их и используйте для переиндексации на уровне = 0, чтобы отсортировать фрейм данных в группах уровня 0.
Вопрос 2 несколько не связан с первым расчетом:
df.groupby('State')['Population2010']\
.apply(lambda x: x.nlargest(2).sum())\
.nlargest(2).index.tolist()
Выход:
['CA', 'AZ']
Используйте nlargest, чтобы найти два самых больших значения, сгруппированных по состоянию и сумме, затем снова используйте nlargest, чтобы найти два самых больших состояния для этих сумм.