Update another column based on logical operations on multiple columns pandas python

Viewed 184

I have a pandas dataframe as below. I want to logically check multiple columns (A,B,C) and update column D with OR operation and update the column names which has true by comma separating in column E. I am not sure on how to achieve it. Any leads will be helpful.

A     B     C      D     E
True  True  True   True  A,B,C
True  False True   True  A,C
False False False  False NA
False False True   True  C       

Edit :

cols = ['A','B','C']
df['D'] = np.where(df[cols].eq(True).any(1), True, False)

I am able to come up with column D but not sure how to proceed with Column E

2 Answers

Use DataFrame.dot + Series.str.rstrip and Series.replace:

cols = pd.Index(['A', 'B', 'C'])
df['E'] = df[cols].dot(cols + ',').str.rstrip(',').replace('', np.nan)

Result:

# print(df)

       A      B      C      D      E
0   True   True   True   True  A,B,C
1   True  False   True   True    A,C
2  False  False  False  False    NaN
3  False  False   True   True      C

Another method would be to use stack

s = df[cols].stack()

df['F'] = s[s.eq(True)].reset_index(1).groupby(level=0)['level_1'].agg(','.join)

print(df)

       A      B      C      D      E      F
0   True   True   True   True  A,B,C  A,B,C
1   True  False   True   True    A,C    A,C
2  False  False  False  False    NaN    NaN
3  False  False   True   True      C      C
Related