根据对多列的逻辑操作更新另一列 pandas python

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

我有一个 pandas 数据框,如下所示。我想从逻辑上检查多列 (A,B,C) 并使用 OR 操作更新 D 列,并通过 E 列中的逗号分隔更新具有 true 的列名。我不确定如何实现它。任何线索都会有所帮助。

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       

编辑:

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

我能想出 D 列,但不确定如何处理 E 列

使用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)

结果:

# 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

另一种方法是使用 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