Закажите субиндекс в dataframe и суммируйте верхние «n» записи - PullRequest
0 голосов
/ 28 апреля 2018

У меня есть датафрейм, который выглядит так:

                    Population2010
State     County

AL        Baldwin     90332
          Douglas     92082
          Rolling     52000
CA        Orange      3879602
          San Diego   4364594
          Los Angeles 12123562
CO        Boulder     161818
          Denver      737728
          Jefferson   222368
AZ        Maricopa    2239378
          Pinal       448888
          Pima        1000564

Я хотел бы поместить данные в порядке убывания, исходя из численности населения, но также чтобы они были упорядочены государством

                    Population2010
State     County

AL        Douglas     92082
          Baldwin     90332
          Rolling     52000
CA        Los Angeles 12123562
          San Diego   4364594
          Orange      3879602
CO        Denver      737728
          Jefferson   222368
          Boulder     161818              
AZ        Maricopa    2239378
          Pima        1000564
          Pinal       448888

и затем я хотел бы суммировать первые две записи данных о населении и дать двум штатам самые высокие суммы.

'CA', 'AZ'

1 Ответ

0 голосов
/ 28 апреля 2018

Вопрос 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, чтобы найти два самых больших состояния для этих сумм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...