3

I have a dataframe like this:

enter image description here

This is the final dataframe that I want:

enter image description here

I know I can use groupby to count, but it only gives me the total number. How can I break down into the count per 'True' and 'False'. and arrange like this?

1

2 Answers 2

2
import pandas as pd

data = [['a', 'TRUE'], ['a', 'FALSE'], ['a', 'TRUE'], ['b', 'TRUE'], ['b', 'TRUE'], ['b', 'TRUE'],
    ['b', 'FALSE'], ['c', 'TRUE'], ['c', 'TRUE']]
df = pd.DataFrame(data, columns=['ID', 'PASS'])


df['value'] = 1
result = df.pivot_table(values='value', index='ID', columns='PASS', aggfunc='sum', fill_value=0)
result['Total'] = result.agg(sum, axis=1)
result
PASS    FALSE   TRUE    Total
ID          
a   1   2   3
b   1   3   4
c   0   2   2
Sign up to request clarification or add additional context in comments.

Comments

0

Another way to do it is by groupby and unstack, such that:

df = df.groupby(["ID","PASS"])['PASS'].count().unstack(fill_value=0)
df['total'] = df['FALSE']+df['TRUE']

desired result:

PASS    FALSE   TRUE    Total
ID          
a         1       2      3
b         1       3      4
c         0       2      2

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.