Python 如何对数据进行分组并计算特定任务
我有一个练习任务如下: 通过按姓名和性别分组数据,计算样本期内的总出生率。将群体分为男性和女性。使用这些子集,选择顶部和底部的3个男性和女性姓名。在一个表中报告它们 所以我有一个.csv文件([1]),包含姓名、性别、出生和年份。我似乎不知道该如何完成这项任务 输出:[2]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
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