查找具有非零行值的pandas列名

3
我有一个名为df的pandas数据框。
df = pd.DataFrame(np.array([[0.6, 0.4, 0], [0.0, 1.0, 0], [0.4, 0.6, 0]]),columns = [-5, 0, 5])
print(df)

    -5    0    5
0  0.6  0.4  0.0
1  0.0  1.0  0.0
2  0.4  0.6  0.0

我希望找到具有非零行值的列的名称。每行中非零值的列名应存储在列表中。例如,以下是df中三行的预期结果。
预期结果:
[[-5,0],[0],[-5,0]]

1
根据你自己的研究,你已经尝试了哪些方法?结果如何? - G. Anderson
3个回答

3

使用:

cols = df.columns.values
mask = df.gt(0.0).values
out = [cols[x].tolist() for x in mask]

输出:

>>> out
[[-5, 0], [0], [-5, 0]]

0

这可能不是最高效的方法。它只是遍历整个数据框并记录列。

(m,n) = df.shape
res_list = []
for i in range(m):
    temp = []
    for col in df.columns:
        if df.loc[i, col] > 0:
            temp.append(col)
    res_list.append(temp)

0

你可以对每一行使用 .apply() 函数,使用 lambda 函数来选择具有相应非零元素的index(等于列索引)。然后,使用 .to_list() 将所有行的结果聚合为一个列表,如下所示:

df.apply(lambda x: x.index[x != 0.0].to_list(), axis=1).to_list()



# Result

[[-5, 0], [0], [-5, 0]]

或者,您还可以在每一行上使用.apply(),并结合一个lambda函数和一个列表推导式来遍历行元素。然后,使用.to_list()将所有行结果聚合到一个列表中,如下所示:
df.apply(lambda x: [y for y, z in x.items() if z != 0.0], axis=1).to_list()




# Result:

[[-5, 0], [0], [-5, 0]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接