gpt4 book ai didi

python - 使用 pandas 按类别进行计算

转载 作者:行者123 更新时间:2023-12-01 01:44:37 25 4
gpt4 key购买 nike

我在正确使用 pandas 与 for 循环和 if 语句时遇到困难。我将尝试用一个例子来说明我想要实现的目标以及我目前正在做的事情。

假设我有六个人(索引代表该人)学习了一些类(class) A、B、C。他们都获得了如下所示的成绩:

Index    Grade     Course
0 2 A
1 4.5 B
2 6 B
3 6.5 C
4 7.5 A
5 9 A

现在假设我想获得累积平均成绩(在我的实际问题中,我想获得经验累积分布函数,但我希望更多的人可以通过保持简单并关注实际问题来帮助我)。将人员 0 的成绩表示为 g_0,人员 1 的成绩表示为 g_1,等等。然后人员 0 的累积平均成绩可以计算为(注意,我故意按成绩排序):g_0/6。对于人员 1 为: (g_0 + g_1)/6。依此类推。

现在我真正想做的是针对每个类别执行此操作。因此,对于每个类别,我想分别计算这个累积平均值,但最终在同一列中。这样一来,人们的等级就可以通过另一种方式进行比较。

让我们用 Cag 表示累积平均成绩,那么我们希望有:

Index    Grade     Course     Cag
0 2 A 0.66 (2/3)
1 4.5 B 2.25 (4.5/2)
2 6 B 5.25 ((4.5 + 6)/2)
3 6.5 C 6.5 (6.5/1)
4 7.5 A 3.17 ((2 + 7.5) / 3)
5 9 A 6.17 ((2 + 7.5 + 9) / 3)

最终我想在 for 循环中执行此操作,因为我有很多类(class)而不是 3 门类(class)。现在我要做的(但不起作用)如下:

 df = pd.DataFrame({ 'grd' : (2, 4.5, 6, 6.5, 7.5, 9),
'cou' : pd.Categorical(["A", "B", "B", "C", "A", "A"])})
iLen = len(df.grd)
df['cgr'] = pd.Series(np.zeros(iLen), index = df.index)

lCou = set(df.cou)


for i in lCou:
z = 0
n = sum(df.cou == i)
for row in df['cou']:
if i == row:
z = (z + df['grd']) / n
df['cgr'] = z

不幸的是,它没有做我想做的事。预先感谢您尝试帮助我!

最佳答案

这应该可以做到:

df = pd.DataFrame({'Grade': [2.0, 4.5, 6.0, 6.5, 7.5, 9.0],
'Index': [0, 1, 2, 3, 4, 5],
'Course': ['A', 'B', 'B', 'C', 'A', 'A']})

df['Cag'] = (df.groupby('Course')['Grade'].transform('cumsum') / df.groupby('Course')['Index'].transform('count')).round(2)

df
# Course Grade Index Cag
#0 A 2.0 0 0.67
#1 B 4.5 1 2.25
#2 B 6.0 2 5.25
#3 C 6.5 3 6.50
#4 A 7.5 4 3.17
#5 A 9.0 5 6.17

关于python - 使用 pandas 按类别进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51521291/

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