Construct a dictionary to replace values in df and Using * and + to construct a series of appropriate message strings and finally join them and assign to df.Result
d = {'Yes': '', 'No': 'Failure ', 'Maybe': 'Attention needed '}
df1 = df[['Col1', 'Col2']]
df['Result'] = ((df1.replace(d)
+ df1.ne('Yes').values * df1.columns.values).agg(','.join, axis=1)
.str.strip(','))
Or
df['Result'] = ((df1.replace(d)
+ df1.ne('Yes').values * (df1.columns+',').values).sum(1)
.str.strip(','))
Out[267]:
Col1 Col2 Result
0 No Yes Failure Col1
1 Yes No Failure Col2
2 No No Failure Col1,Failure Col2
3 Maybe No Attention needed Col1,Failure Col2
Here the detail
df1.replace(d) + df1.ne('Yes').values * df1.columns.values
Out[268]:
Col1 Col2
0 Failure Col1
1 Failure Col2
2 Failure Col1 Failure Col2
3 Attention needed Col1 Failure Col2
((df1.replace(d) + df1.ne('Yes').values * df1.columns.values).agg(','.join, axis=1)
.str.strip(','))
Out[269]:
0 Failure Col1
1 Failure Col2
2 Failure Col1,Failure Col2
3 Attention needed Col1,Failure Col2
dtype: object