2017-01-17 1 views
1

먼저 id을 그룹화하고 각 id을 계산합니다. 얼마나 많은 행이 score>avg인지 계산합니다.Python Pandas 그룹이 다음 조건으로 필터링합니다.

dataframe :

id col1 avg score 
a 1  3 3 
a 0  4 3 
a 1  3 5 
b 1  2 4 
b 1  4 5 

것 :

id score>avg total 
a 1  3 
b 2  2 

내 코드 : 내가 가진

df2 = df.groupby('id', as_index=False)[['score'] > ['avg']].agg({'score>avg': 'count', 'total': 'count'}) 

오류 :

KeyError: 'Column not found: False' 

[['score'] > ['avg']] 부분을 편집해야하는 이유가 확실하지 않습니다.

답변

2

먼저 할 일은 점수가 평균보다 큰지 그리고 'id'를 기준으로 그룹화하고 sumcount 새 열을 나타내는 부울 값 열을 만드는 것입니다.

df['score_gt_avg'] = df.score > df.avg 
df.groupby('id')['score_gt_avg'].agg([('score>avg', 'sum'),('total', 'count')]) 

    score>avg total 
id     
a   1.0  3 
b   2.0  2 

등가 당신은 또한 한 줄에서 수행 할 수 있습니다

df.score.gt(df.avg).groupby(df.id).agg([('score>avg', 'sum'),('total', 'count')])