【问题标题】:how to group data and calculating a specific task如何对数据进行分组并计算特定任务
【发布时间】:2019-09-25 01:18:52
【问题描述】:

下面有一个练习任务:

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

【问题讨论】:

  • 需要输入数据和预期输出数据的片段来帮助您。
  • 完成!不确定输出的确切外观。我只需要按照给定的说明进行操作
  • 请以文字而非图片的形式提供数据的 sn-p。我们不能用图片创建数据框。
  • 完成!对此感到抱歉
  • 您想知道每年或您拥有的整个数据集的顶部和底部 3 个男性和女性名称吗?

标签: python pandas csv group-by pivot-table


【解决方案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

【讨论】:

  • @xching 我已经更新了代码的第一行,以便输出与名称匹配(之前它是反向的)。
猜你喜欢
  • 2023-01-11
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
相关资源
最近更新 更多