python - 我想选择某个列并创建新列,如果在 pyhton 中为 true,它将返回列名?
问题描述
我有一个数据框
A AA B D C E
True 2 False 33 False False
False 3 False 43 True False
True 5 True 56 False True
False 2 False 7 nan True
我想获得名为“结果”的列,如果它是真的,它将从 A、B 和 C 返回列名,如果其中任何一个不是真,则返回 nan。
预期列
result
A
C
A,B
nan
解决方案
首先通过True
s 比较值,然后将矩阵乘法与带分隔符的列相加 by DataFrame.dot
,从右侧删除分隔符 bySeries.str.rstrip
并最后将空值替换为缺失值:
df['result'] = df.eq(True).dot(df.columns + ',').str.rstrip(',').replace('',np.nan)
print (df)
A AA B D C result
0 True 2 False 33 False A
1 False 3 False 43 True C
2 True 5 True 56 False A,B
3 False 2 False 7 NaN NaN
推荐阅读
- awk - awk 代码输出具有匹配字段的行,但没有输出
- java - 将 Jsch 0.1.42 升级到 0.1.54 会生成到远程服务器的连接超时
- java - 使用 for-each 循环时可以跳过部分数组吗?
- javascript - 通过 Webpack 移动文件
- java - 如何更改子类的属性值
- oracle - 设置 NLS_LANG
- ruby-on-rails - 捆绑安装不适用于 bundler 2.0.1 的 rails-4.2.6
- r - 使用 ggplot 为绘图中的特定点着色
- tfs - 调用目标已引发 TFS 2017 构建定义异常
- bash - 如何从具有 bash 文件名的列表中读取全局变量?