Reputation: 17
I have result, student, version and status columns. in this I want to do group by using Student , Version and result = pass count and result = fail count
similarly like df.groupby(["student", "version", "result=pass"]).size().reset_index(name="new_result")
the below is my data frame
result | student | version | status |
---|---|---|---|
pass | Student-A | L-1.0 | Active |
fail | Student-A | L-1.0 | Active |
fail | Student-A | L-1.0 | Active |
pass | Student-A | M-1.0 | Active |
fail | Student-A | M-1.0 | Active |
pass | Student-B | N-1.0 | Active |
pass | Student-B | N-1.0 | Active |
pass | Student-B | N-1.0 | Active |
pass | Student-C | O-1.0 | Active |
pass | Student-C | O-1.0 | Active |
fail | Student-C | O-1.0 | Active |
fail | Student-C | P-1.0 | Active |
fail | Student-C | P-1.0 | Active |
I want my output data frame as below:
student | version | pass_count | fail_count | status | total_count (pass+fail) |
---|---|---|---|---|---|
Student-A | L-1.0 | 1 | 2 | Active | 3 |
Student-A | M-1.0 | 1 | 1 | Active | 2 |
Student-B | N-1.0 | 3 | 0 | Active | 3 |
Student-C | O-1.0 | 1 | 1 | Active | 2 |
Student-C | P-1.0 | 0 | 2 | Active | 2 |
I am able to get pass and fail count using the below but not total count, anyone pls help
pd.pivot_table(master_df, index=['status', 'student', 'version'], columns=['result'], aggfunc=len, fill_value=0)
Upvotes: 0
Views: 2600
Reputation: 23207
If you want to get the total count, you can use:
df.groupby(["student", "version"])['result'].count().reset_index(name='total_count')
Result:
student version total_count
0 Student-A L-1.0 3
1 Student-A M-1.0 2
2 Student-B N-1.0 3
3 Student-C O-1.0 3
4 Student-C P-1.0 2
Or, if you want to get it based on your pivot table, you can use:
df2 = pd.pivot_table(df, index=['status', 'student', 'version'], columns=['result'], aggfunc=len, fill_value=0).reset_index().rename_axis(columns=None)
df2['total_count'] = df2['fail'] + df2['pass']
Result:
print(df2)
status student version fail pass total_count
0 Active Student-A L-1.0 2 1 3
1 Active Student-A M-1.0 1 1 2
2 Active Student-B N-1.0 0 3 3
3 Active Student-C O-1.0 1 2 3
4 Active Student-C P-1.0 2 0 2
Upvotes: 1