如何在 pandas 中使用 groupby 根据另一列中的条件计算百分比/比例总数
How to use groupby in pandas to calculate a percentage / proportion total based on a criteria in another column
我正在尝试研究如何使用 pandas 中的 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
等等。我希望 'Number Criteria' 列显示每个性别和年份占总数的百分比 - 因此上面的 1998 年不是 N = 14507 和 Y = 2308,而是 N = 86.27% 和 Y = 13.73%。
谁能告诉我怎么做?
本题是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')
我正在尝试研究如何使用 pandas 中的 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
等等。我希望 'Number Criteria' 列显示每个性别和年份占总数的百分比 - 因此上面的 1998 年不是 N = 14507 和 Y = 2308,而是 N = 86.27% 和 Y = 13.73%。
谁能告诉我怎么做?
本题是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')