首页 > 解决方案 > 选择值大于 0 的所有列名

问题描述

我有未定义数量的具有某些值的列。例如,假设有 4 列:[a,b,c,d],并且每个列名都有关联的值,如下所示:

a   b   c   d
0   23  11  0
11  43  33  22
12  0   12  0

我想在 旁边写另一列d,它的值大于 0 的列的最大值,例如: 像这样:

a   b   c   d   e
0   23  11  0   b,c
11  43  33  22  a,b,c,d
12  0   12  0   a,c

我的尝试:

dic2 = {'a':[12,0,23],'b':[21,23,0],'c':[0,22,33],'d':[0,22,0]}
df = pd.DataFrame(dic2)
df[df>0]

这将在NaN任何为零的地方返回值,但我不知道如何获取具有这些NaN值的列。

标签: pythonpandas

解决方案


您可以过滤更大0的值,例如 boolean DataFrame,然后使用DataFrame.dot列名称进行矩阵乘法,最后通过使用以下索引删除分隔符str

df['e'] = df.gt(0).dot(df.columns + ',').str[:-1]
print (df)
    a   b   c   d      e
0  12  21   0   0    a,b
1   0  23  22  22  b,c,d
2  23   0  33   0    a,c

推荐阅读