根据行值条件从数据框中提取列名

时间:2017-10-27 08:23:07

标签: python dataframe

我有一个数据框

     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)找到跨行的最高值列名 但如何找到列的所有名称。

1 个答案:

答案 0 :(得分:4)

您可以将applyaxis=1一起用于按行处理,并通过将值转换为bool进行过滤 - 0False,而不是0True

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, ' '' '']]