如何在熊猫数据框中查找非零元素的行和列



我有一个熊猫数据帧,看起来像这样:

Type    All    Fail     Pass
A       0       0        0
B       1       0        0
C       0       0        0

现在,我想获取非零元素的列名以及Type列中的相应值。因此,在这种情况下,我想返回BAll。我知道如何使用此compare_severity.select_dtypes(include=['number']) != 0返回真/假矩阵。但是我不确定如何获取True元素的列名和行索引。有谁知道如何做到这一点?

看看这是否有帮助,

df = df.set_index("Type")
result = df.where(df.select_dtypes(include="number") > 0) 
.fillna("") 
.to_dict(orient='index')
print({k:i for k, v in result.items() for i, j in v.items() if j})

输出

{'B': 'All'}

我们可以在这里将idxmaxdropna一起使用:

num = df.select_dtypes('number')
num.where(num.ne(0)).idxmax().dropna()
All    1.0
dtype: float64

或者我们也可以使用np.where为我们提供索引:

df.columns[np.where(num)[0]].tolist()
['All']

解决此问题的一种方法是查找数据帧等于 1 的行,以及数据帧等于 1 的列。您必须将 Type 设置为索引,以确保相等性检查仅关注数字列。

df = df.set_index("Type")
df.loc[df.eq(1).any(axis=1),df.eq(1).any()]

All
Type    
B      1

最新更新