我有一个熊猫数据框,看起来像这样:
Type All Fail Pass
A 0 0 0
B 1 0 0
C 0 0 0
现在,我想获取非零元素的列名以及Type
列中的对应值。因此,在这种情况下,我想返回B
和All
。我知道如何使用此compare_severity.select_dtypes(include=['number']) != 0
返回一个真/假矩阵。但是我不确定如何获取True
元素的列名和行索引。有谁知道该怎么做?
答案 0 :(得分:1)
看看是否有帮助,
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'}
答案 1 :(得分:1)
我们可以在此处将idxmax
与dropna
一起使用:
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']
答案 2 :(得分:0)
解决此问题的一种方法是找到数据框等于1的行以及数据框等于1的列。您必须将Type设置为索引,以确保相等检查为专注于数字列。
df = df.set_index("Type")
df.loc[df.eq(1).any(axis=1),df.eq(1).any()]
All
Type
B 1