Python 如何在Pandas中获取groupby之后的列计数百分比
我试图得到数据列表中每个名字的等级分布。 然而,我不知道如何计算每个等级在其等级组中的比例/百分比。下面是一个例子:Python 如何在Pandas中获取groupby之后的列计数百分比,python,pandas,group-by,aggregate,percentage,Python,Pandas,Group By,Aggregate,Percentage,我试图得到数据列表中每个名字的等级分布。 然而,我不知道如何计算每个等级在其等级组中的比例/百分比。下面是一个例子: df.head() 我使用grade\u count=df.groupby(['name','rank','grade']).['grade'].size())给出其(name,rank)组中每个年级的计数: 现在,对于计算的每个大小,我想得到它在(姓名、等级)组中的比例(即等级在等级、系统中的比例)这是我想要的输出: name rank grade Bob
df.head()
我使用grade\u count=df.groupby(['name','rank','grade']).['grade'].size())
给出其(name,rank)组中每个年级的计数:
现在,对于计算的每个大小,我想得到它在(姓名、等级)组中的比例(即等级在等级、系统中的比例)这是我想要的输出:
name rank grade
Bob 1 A 2 0.5 (Bob @ rank 1 had 4 grades, and 50% of them are A's)
B 1 0.25
C 1 0.25
2 B 1 1
3 C 1 1
Joe 1 C 1 1
2 B 2 1
3 A 1 0.33
B 2 0.66
我通过使用rank\u totals=grade\u count.groupby(level[0,1]).sum()
获得了每个排名组的总数,结果是:
name rank
Bob 1 4
2 1
3 1
Joe 1 1
2 2
3 3
如何将
grade\u count
中的数字除以rank\u totals
中相应的排名总数?按名称和排名级别对数据进行分组,并使用transform
获取系列的总数并将其广播到整个系列。使用该序列分割当前序列:
grade_count.groupby(level = [0,1]).transform(sum)
Out[19]:
name rank grade
Bob 1 A 4
B 4
C 4
2 B 1
3 C 1
Joe 1 C 1
2 B 2
3 A 3
B 3
dtype: int64
grade_count / grade_count.groupby(level = [0,1]).transform(sum)
Out[20]:
name rank grade
Bob 1 A 0.500000
B 0.250000
C 0.250000
2 B 1.000000
3 C 1.000000
Joe 1 C 1.000000
2 B 1.000000
3 A 0.333333
B 0.666667
欺骗:
name rank
Bob 1 4
2 1
3 1
Joe 1 1
2 2
3 3
grade_count.groupby(level = [0,1]).transform(sum)
Out[19]:
name rank grade
Bob 1 A 4
B 4
C 4
2 B 1
3 C 1
Joe 1 C 1
2 B 2
3 A 3
B 3
dtype: int64
grade_count / grade_count.groupby(level = [0,1]).transform(sum)
Out[20]:
name rank grade
Bob 1 A 0.500000
B 0.250000
C 0.250000
2 B 1.000000
3 C 1.000000
Joe 1 C 1.000000
2 B 1.000000
3 A 0.333333
B 0.666667