Combine values in pandas dataframe to string

Viewed 78

I have a dataframe similar to this:

       Male  Over18  Single
0     0       0       1
1     1       1       1
2     0       0       1

I would like an extra column which gets a commaseperated string with the columnnames where the value is 1:

   Male  Over18  Single        CombinedString
0     0       0       1                Single
1     1       1       1  Male, Over18, Single
2     0       0       1                Single

Hope there is someone out there who can help :)

2 Answers

One pandaic way is to perform a pandas dot product with the column headers:

df['CombinedString'] = df.dot(df.columns+',').str.rstrip(',')
df

   Male  Over18  Single      CombinedString
0     0       0       1              Single
1     1       1       1  Male,Over18,Single
2     0       0       1              Single

Another method would be to use .stack() and groupby.agg()

df['CombinedString'] = df.mask(df.eq(0)).stack().reset_index(1)\
                     .groupby(level=0)['level_1'].agg(','.join)


print(df)

   Male  Over18  Single      CombinedString
0     0       0       1              Single
1     1       1       1  Male,Over18,Single
2     0       0       1              Single
Related