我有一个数据框
A B C
u1 0 .5 .2
u2 .2 0 .3
u3 .1 0 0
我需要针对值不为零的每个索引查找列名 所以我需要输出
elements
u1 [B,C]
u2 [A,C]
u3 [A]
我可以使用df.idxmax(axis=1)
找到跨行的最高值列名
但如何找到列的所有名称。
答案 0 :(得分:4)
您可以将apply
与axis=1
一起用于按行处理,并通过将值转换为bool
进行过滤 - 0
为False
,而不是0
是True
:
df = df.apply(lambda x: x.index[x.astype(bool)].tolist(), 1)
print (df)
u1 [B, C]
u2 [A, C]
u3 [A]
dtype: object
如果输出应为string
s:
s = np.where(df, ['{}, '.format(x) for x in df.columns], '')
df = pd.Series([''.join(x).strip(', ') for x in s], index=df.index)
print (df)
u1 B, C
u2 A, C
u3 A
dtype: object
详情:
print (s)
[['' 'B, ' 'C, ']
['A, ' '' 'C, ']
['A, ' '' '']]