在這里我被困在一個關于找到高于平均/平均分數的行數的問題。
我的 df 是這樣的:
Subject Name Score
0 s1 Amy 100
1 s1 Bob 90
2 s1 Cathy 92
3 s1 David 88
4 s2 Emma 95
5 s2 Frank 80
6 s2 Gina 86
7 s2 Helen 89
...
我可以通過使用獲取每個科目的平均值,df.groupby('Subject').Score.mean()
但我不知道如何找到每個科目的分數高于平均水平的學生人數。
(我想我可以使用 for 回圈來計算計數。但我想知道大熊貓是否有辦法做到這一點。)
如果有人可以提供幫助,那就太好了。謝謝你。
uj5u.com熱心網友回復:
您可以嘗試使用groupby和apply:
def count_above_avg(g):
avg = g.Score.mean()
return (g.Score > avg).sum()
df.groupby('Subject').apply(count_above_avg)
uj5u.com熱心網友回復:
使用.transform它可以讓您在不轉換當前索引的情況下應用 group by 操作。
df['is_above_subject_avg'] = (
df['Score'] >= df.groupby('Subject')['Score'].transform('mean')
)
df.groupby('Subject')['is_above_subject_avg'].sum()
Subject
s1 1
s2 2
Name: is_above_subject_avg, dtype: int64
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371350.html
