首页 > 解决方案 > 我想选择某个列并创建新列,如果在 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

标签: pythonpandas

解决方案


首先通过Trues 比较值,然后将矩阵乘法与带分隔符的列相加 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

推荐阅读