Сортировать и выбрать после агрегации (Панды) - PullRequest
0 голосов
/ 16 декабря 2018

Я хотел бы объединить Pandas DataFrame, чтобы подсчитать количество детей (переменная child_name ) для каждого отца (переменная Father_name ).Фрейм данных выглядит следующим образом (это, конечно, игрушечный пример, я хочу понять концепцию):

father_name   child_name
Robert        Julian
Robert        Emily
Robert        Dan
Carl          Jack
Carl          Rose
John          Lucy
Paul          Christopher
Paul          Thomas

Теперь я определяю словарь агрегация и использую его в фрейме данных. d :

import pandas as pd
aggregation = {
    'child_name': {
        'n_children': 'count'
    }
}
d.groupby('father_name').agg(aggregation)

Я получаю этот вывод:

            child_name
            n_children
father_name           
Carl                 2
John                 1
Paul                 2
Robert               3

и теперь я хотел бы:

  • сортировать отцовв соответствии с количеством детей (в порядке убывания)
  • показывают только отцов, у которых есть 2 или более детей

Как я могу это сделать?Может быть, есть и более быстрый способ сделать это, но я бы тоже хотел изучить этот метод.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Давайте попробуем вот так, чтобы выполнить ваши два условия:

1002

DEMO: https://repl.it/@SanyAhmed/EarnestTatteredRepo

0 голосов
/ 16 декабря 2018

Вы можете разрешить

df_count = df.groupby('father_name').count()
df_count[df_count.child_name > 1].sort_values(by='child_name', ascending=False)

Вывод:

             child_name
father_name
Robert                3
Carl                  2
Paul                  2

Если вы хотите более интенсивно использовать agg, это может выглядеть примерно так (что выдаст FutureWarning, поскольку переименование с использованием dicts устарело):

df.groupby('father_name').agg({'child_name': {'n_children': lambda x: len(x) if len(x) > 1 else None}}).dropna()

и последующая сортировка результата.

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