根据对多列的逻辑操作更新另一列 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
我有一个 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