Pandas groupby самая низкая сумма

Я пытаюсь использовать groupby , nlargest и sum в Pandas вместе, но у меня проблемы с работой.

 State County Population Alabama a 100 Alabama b 50 Alabama c 40 Alabama d 5 Alabama e 1 ... Wyoming a.51 180 Wyoming b.51 150 Wyoming c.51 56 Wyoming d.51 5 

Я хочу использовать groupby для выбора по состоянию, а затем получить 2 лучших groupby по численности населения. Затем используйте только те из трех верхних номеров графства, чтобы получить сумму для этого состояния.

В конце концов, у меня будет список, в котором будет состояние и население (из его лучших 2 стран).

Я могу получить groupby и nlargest с nlargest , но получение суммы самого nlargest(2) является проблемой.

Линия, которую я имею прямо сейчас, просто: df.groupby('State')['Population'].nlargest(2)

2 Solutions collect form web for “Pandas groupby самая низкая сумма”

Вы можете использовать apply после выполнения groupby :

 df.groupby('State')['Population'].apply(lambda grp: grp.nlargest(2).sum()) 

Я думаю, что эта проблема df.groupby('State')['Population'].nlargest(2) что df.groupby('State')['Population'].nlargest(2) вернет DataFrame, так что вы больше не сможете выполнять операции на уровне группы. В общем случае, если вы хотите выполнять несколько операций в группе, вам необходимо использовать apply / agg .

Результат:

 State Alabama 150 Wyoming 330 

Используя agg , логика группировки выглядит так:

df.groupby('State').agg({'Population': {lambda x: x.nlargest(2).sum() }})

Это приводит к другому объекту dataframe; которые вы могли бы запросить, чтобы найти самые густонаселенные государства и т. д.

  Population State Alabama 150 Wyoming 330 
  • Функция Python: next ()
  • Python - Sum не работает в синтаксисе понимания списка, если источником является файл
  • пенда за последние пять минут
  • Суммирование факториалов в Python
  • Добавление чисел в строку
  • Функция sum () Python со списком параметров
  • Как получить сумму продуктов всех комбинаций в массиве в Python?
  • Поиск суммы. TypeError: объект «float» не является итерируемым
  • Python - лучший язык программирования в мире.