我有一個資料框,代表學生在某些學習小組的考試中的活動。一個學生可以是多個組的一部分。他們還可以多次回答一個問題:
study_group student answer question
s1 a True q1
s1 a False q2
s1 a True q2
s1 b True q2
s1 b True q2
s2 a False q3
s2 a False q4
s2 a True q4
s2 c False q1
s2 d True q2
s3 e True q1
s3 e True q5
s3 c True q2
s3 a True q6
我對學習小組的表現進行了各種統計,將它們成對地進行比較,并僅在普通考試中對其進行評估,以免產生偏見。但是,是否有可能看到屬于多個學習小組的學生實際上在一個小組中的表現是否比在另一個小組中表現更好?
我手動對資料框進行切片student,然后再次切片study_group并計算每個組中每個學生的平均值。但那是極其低效的。我想要一個輸出(我希望我沒有犯任何計算錯誤):
study_group student Average
s1 a 0.66
s2 a 0.33
s3 a 1
s1 b 1
s2 c 0
s3 c 1
s2 d 1
s3 e 1
有什么快速的方法嗎?
uj5u.com熱心網友回復:
>>> g = df.groupby(['student','study_group'])
>>> round(g.answer.sum()/g.answer.count(),2)
student study_group
a s1 0.67
s2 0.33
s3 1.00
b s1 1.00
c s2 0.00
s3 1.00
d s2 1.00
e s3 1.00
Name: answer, dtype: float64
或者,如果你想要一個單線:
>>> round((group:=df.groupby(['student','study_group']).answer).sum()/group.count(),2).unstack()
study_group s1 s2 s3
student
a 0.67 0.33 1.0
b 1.00 NaN NaN
c NaN 0.00 1.0
d NaN 1.00 NaN
e NaN NaN 1.0
順便說一下,如果您對哪些學生在多少個學習小組感興趣:
>>> df.groupby(['student','study_group']).size().unstack().count(axis=1)
student
a 3
b 1
c 2
d 1
e 1
dtype: int64
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/338981.html
上一篇:yacc中的默認資料型別
下一篇:SQL-如何計算期初和期末余額
