小编典典

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

python

我正在尝试找出如何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%。

谁能建议该怎么做?


阅读 215

收藏
2020-12-20

共1个答案

小编典典

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

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')
2020-12-20