как сгруппировать данные и рассчитать конкретную задачу

У меня есть практическое задание ниже:

Подсчитайте общее число рождений за период выборки, сгруппировав данные по имени и полу. Разделите группу на мужскую и женскую. Используя эти подмножества, выберите верхние и нижние 3 мужских и женских имени. Запишите их в одну таблицу.

Итак, у меня есть файл .csv ([1]), содержащий имена, пол, дату рождения и год. Я не могу понять, как именно выполнить эту задачу.

Выход: [2]

              births
sex year            
F   1990  124.598148
    1991  121.215316
    1992  118.106646
    1993  114.475367
    1994  113.331661
    1995  111.563710
    1996  110.258765
    1997  107.671846
    1998  106.412899
    1999  104.643578
    2000  102.779761
    2001  100.116023
    2002   99.283904
    2003   99.055598
    2004   97.443251
    2005   96.216343
    2006   94.690833
    2007   93.415595
    2008   92.263176
    2009   90.823585
M   1990  216.417422
    1991  209.419977
    1992  203.524373
    1993  192.999015
    1994  188.475200
    1995  184.294158
    1996  179.760661
    1997  174.291755
    1998  169.057720
    1999  165.296596
    2000  162.003634
    2001  157.905281
    2002  155.438592
    2003  154.773933
    2004  150.038389
    2005  149.376874
    2006  146.330312
    2007  144.067535
    2008  139.294722
    2009  136.291111

person xching    schedule 25.09.2019    source источник
comment
Фрагмент входных данных и ожидаемых выходных данных необходим, чтобы помочь вам.   -  person moys    schedule 25.09.2019
comment
Готово! не уверен, как именно должен выглядеть вывод. Мне просто нужно следовать данным инструкциям   -  person xching    schedule 27.09.2019
comment
Пожалуйста, предоставьте фрагмент данных в виде текста, а не изображения. Мы не можем создавать кадры данных с изображениями.   -  person moys    schedule 27.09.2019
comment
Готово! простите за это   -  person xching    schedule 27.09.2019
comment
Вы хотите знать 3 верхних и нижних 3 мужских и женских имени за каждый год или за весь набор данных, который у вас есть?   -  person moys    schedule 27.09.2019
comment
Спасибо SH-SF за помощь!!   -  person xching    schedule 27.09.2019
comment
Не могли бы вы помочь мне с некоторыми другими задачами? Задача 1: Создайте сводную таблицу общего числа рождений по полу и годам, а затем нанесите их на график.   -  person xching    schedule 27.09.2019
comment
Задача 3: Используя самые популярные мужские и женские имена (всего два имени), проверьте их тенденции с течением времени, т. е. начертите общее количество рождений с этими именами с 1990 по 2010 год. Для этого вам сначала нужно создать опорную точку. Таблица.   -  person xching    schedule 27.09.2019
comment
пожалуйста, задавайте дополнительные вопросы. Поверьте мне, есть люди, которые могут творить чудеса с пандами, и они готовы помочь. Просто убедитесь, что вы четко указали свой ввод и вывод в вопросе.   -  person moys    schedule 27.09.2019


Ответы (1)


IIUC, это то, что вам нужно.

g=g=df.groupby(['name','sex'])['births'].sum().reset_index(name='birth_sum').sort_values('birth_sum',ascending=False)
top_names=g.loc[g.sex=='F'].head(3).append(g.loc[g.sex=='M'].head(3))
bottom_names=g.loc[g.sex=='F'].tail(3).append(g.loc[g.sex=='M'].tail(3))

Ввод (данные изменены, так как опубликованные вами данные содержат данные только за один год)

       name     sex births  year
0   Jessica     F   46459   1990
1   Ashley      F   45544   1990
2   Brittany    F   36532   1990
3   Amanda      F   34391   1990
4   Samantha    F   25864   1990
5   Jessica     F   46459   1991
6   Ashley      F   45544   1991
7   Brittany    F   36532   1991
8   Amanda      F   34391   1991
9   Samantha    F   55864   1991
10  Jessica     F   46459   1992
11  Ashley      F   45544   1992
12  Brittany    F   86532   1992
13  Amanda      F   34391   1992
14  Samantha    F   55864   1992
15  James       M   15      1990
16  Rob         M   20      1990
17  Bob         M   25      1990
18  Sam         M   45      1990
19  Richard     M   60      1990
20  James       M   15      1991
21  Rob         M   200     1991
22  Bob         M   300     1991
23  Sam         M   45      1991
24  Richard     M   60      1991
25  James       M   145     1992
26  Rob         M   182     1992
27  Bob         M   400     1992
28  Sam         M   216     1992
29  Richard     M   60      1992

Вывод

print(top_names)
      name     sex  birth_sum
3   Brittany    F   159596
5   Jessica     F   139377
9   Samantha    F   137592
2   Bob         M   725
7   Rob         M   402
8   Sam         M   306

print(bottom_names)
       name     sex birth_sum
9   Samantha    F   137592
1   Ashley      F   136632
0   Amanda      F   103173
8   Sam         M   306
6   Richard     M   180
4   James       M   175
person moys    schedule 27.09.2019
comment
@xching Я обновил 1-ю строку кода, чтобы этот вывод соответствовал именам (ранее он был обратным). - person moys; 27.09.2019