如何在pandas中使用groupby根据另一列中的条件计算百分比/比例合计

2024-05-20 18:22:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力研究如何使用pandas中的groupby函数计算出给定是/否条件下每年值的比例。

例如,我有一个名为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%。

有人能建议怎么做吗?


Tags: 数据函数namenumberpandasnames条件year
1条回答
网友
1楼 · 发布于 2024-05-20 18:22:10

这个问题是suggested duplicate的直接扩展。从接受的答案中,这将起作用:

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')

相关问题 更多 >