1

How to create dynamic columns from this pandas dataframe.

 Name, Sex
    a, M
    b, F
    c, M
    d, F

Expected dataframe:

Name, M, F
a, 1, 0
b, 0, 1
c, 1, 0
d, 0, 1

I have tried pandas.pivot() but of no use, could you guys suggest something.

2 Answers 2

5

Use get dummies:

pd.concat([df['Name'], df['Sex'].str.get_dummies()], axis=1)
Out: 
    Name   F   M
0      a   0   1
1      b   1   0
2      c   0   1
3      d   1   0

df['Sex'].str.get_dummies() generates the dummies:

df['Sex'].str.get_dummies()
Out: 
    F   M
0   0   1
1   1   0
2   0   1
3   1   0

and then you can use pd.concat to combine the result with the name column.

Sign up to request clarification or add additional context in comments.

Comments

1

You can create a count variable based on the two columns and then do the pivoting, something like:

import pandas as pd
df.groupby(["Name", "Sex"]).size().unstack(level = 1, fill_value = 0)

# Sex   F   M
#Name       
#   a   0   1
#   b   1   0
#   c   0   1
#   d   1   0

Another option is to use crosstab from pandas:

import pandas as pd
pd.crosstab(df['Name'], df['Sex'])

# Sex   F   M
#Name       
#   a   0   1
#   b   1   0
#   c   0   1
#  d    1   0

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.