如何使用大pandas中的groupby根据另一列中的条件计算百分比总数

发布于 2021-01-29 17:16:23

我正在尝试找出如何groupby在给定的Yes / No条件下在熊猫中使用该函数来计算每年的价值比例。

例如,我有一个数据框,名为names

  Name  Number  Year   Sex Criteria
0  name1     789  1998  Male      N
1  name1     688  1999  Male      N
2  name1     639  2000  Male      N
3  name2     551  1998  Male      Y
4  name2     499  1999  Male      Y

我可以用

namesgrouped = names.groupby(["Sex", "Year", "Criteria"]).sum()

要得到:

                   Number
Sex    Year      Criteria
Male   1998 N        14507
            Y         2308
       1999 N        14119
            Y         2331

等等。我希望“数字标准”列显示每种性别和年份占总数的百分比-因此,不是1998年的N = 14507和Y = 2308,而是N = 86.27%和Y =
13.73%。

谁能建议该怎么做?

关注者
0
被浏览
67
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这个问题是建议重复项的直接扩展。从公认的答案中借用,这将起作用:

    In [46]: namesgrouped.groupby(level=[0, 1]).apply(lambda g: g / g.sum())
    Out[46]: 
                          Number
    Sex  Year Criteria          
    Male 1998 N         0.588806
              Y         0.411194
         1999 N         0.579612
              Y         0.420388
         2000 N         1.000000
    

    编辑 :转换操作可能比应用更快:

    namesgrouped / namesgrouped.groupby(level=[0, 1]).transform('sum')
    


推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看