gpt4 book ai didi

python - 如何在 Pandas 的 groupby 之后获取列的计数百分比

转载 作者:太空宇宙 更新时间:2023-11-03 11:45:29 24 4
gpt4 key购买 nike

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

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) 组内的成绩:

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) 组中的比例(即一个等级在一个系统中的比例是多少)这是我的输出喜欢:

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(level[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

关于python - 如何在 Pandas 的 groupby 之后获取列的计数百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40658129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com