为了账号安全,请及时绑定邮箱和手机立即绑定

基于对多列 pandas python 的逻辑操作更新另一列

基于对多列 pandas python 的逻辑操作更新另一列

交互式爱情 2023-03-08 17:15:50
我有一个熊猫数据框如下。我想从逻辑上检查多列(A,B,C)并使用 OR 操作更新 D 列,并通过 E 列中的逗号分隔更新具有 true 的列名。我不确定如何实现它。任何线索都会有所帮助。A     B     C      D     ETrue  True  True   True  A,B,CTrue  False True   True  A,CFalse False False  False NAFalse False True   True  C       编辑 :cols = ['A','B','C']df['D'] = np.where(df[cols].eq(True).any(1), True, False)我能够想出 D 列,但不确定如何处理 E 列
查看完整描述

2 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

使用DataFrame.dot+Series.str.rstripSeries.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


查看完整回答
反对 回复 2023-03-08
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

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


查看完整回答
反对 回复 2023-03-08
  • 2 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信