python – 如何获得Pandas中groupby之后的列计数百分比

我正在尝试在数据列表中获取每个等级的等级分布.
但是,我无法弄清楚如何获得每个年级的比例/百分比超过其等级组.这是一个例子:

df.head()

name    rank    grade
Bob     1       A
Bob     1       A
Bob     1       B
Bob     1       C
Bob     2       B
Bob     3       C
Joe     1       C
Joe     2       B
Joe     2       B
Joe     3       A
Joe     3       B
Joe     3       B

我使用grade_count = df.groupby([‘name’,’rank’,’grade’]).[‘grade’].size())来给出其(名称,等级)组中每个年级的计数:

name    rank    grade
Bob     1       A     2
                B     1
                C     1
        2       B     1
        3       C     1
Joe     1       C     1
        2       B     2
        3       A     1
                B     2

现在对于每个计算的大小,我想得到它与(名称,等级)组的比例(即系统内等级中等级的比例是多少)这是我想要的输出:

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_totals = grade_count.groupby(级别[0,1])得到每个等级组的总数.sum()导致:

name    rank    
Bob     1       4
        2       1
        3       1
Joe     1       1
        2       2
        3       3

如何将grade_count中的数字除以rank_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
上一篇:优化MySQL聚合查询


下一篇:c# – Rx:配对窗口持续时间与窗口内引发的事件数