选择值大于 0 的所有列名

Ves*_*per 2 python pandas

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

a   b   c   d
0   23  11  0
11  43  33  22
12  0   12  0
Run Code Online (Sandbox Code Playgroud)

我想在 旁边写另一列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
Run Code Online (Sandbox Code Playgroud)

我的尝试:

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

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

jez*_*ael 6

您可以过滤更大的值,例如0布尔 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
Run Code Online (Sandbox Code Playgroud)