Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何对数据进行分组并计算特定任务_Python_Pandas_Csv_Group By_Pivot Table - Fatal编程技术网

Python 如何对数据进行分组并计算特定任务

Python 如何对数据进行分组并计算特定任务,python,pandas,csv,group-by,pivot-table,Python,Pandas,Csv,Group By,Pivot Table,我有一个练习任务如下: 通过按姓名和性别分组数据,计算样本期内的总出生率。将群体分为男性和女性。使用这些子集,选择顶部和底部的3个男性和女性姓名。在一个表中报告它们 所以我有一个.csv文件([1]),包含姓名、性别、出生和年份。我似乎不知道该如何完成这项任务 输出:[2] births sex year F 1990 124.598148 1991 121.215316 1992 118.106646 199

我有一个练习任务如下:

通过按姓名和性别分组数据,计算样本期内的总出生率。将群体分为男性和女性。使用这些子集,选择顶部和底部的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

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))
输入(我修改了数据,因为您发布的数据只有一年的数据)

输出

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

需要输入数据和预期输出数据的片段来帮助您。完成!不确定输出的确切外观。我只需要按照给定的说明进行操作。请以文本形式提供数据片段,而不是图片。我们无法使用图片创建数据帧。完成!很抱歉,您想知道每年或您拥有的整个数据集的前三名和后三名男性和女性姓名吗?@xching我已更新了代码的第一行,以便输出与姓名匹配(之前是相反的)。
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