如何根据行值获取pandas中的列名?

时间:2018-06-11 02:43:28

标签: python pandas dataframe

我有一个数据框,df:

        id_0         id_1          id_2
0         1            0             1
1         1            0             0
2         0            1             0
3         1            1             0
4         0            0             1
5         0            0             0

我想获取每行的列名称,如果有1.如何做到这一点?谢谢。

结果:

           result
0         id_0, id_2
1         id_0
2         id_1
3         id_0, id_1
4         id_2
5         NaN

5 个答案:

答案 0 :(得分:6)

使用dot

df.dot(df.columns+',').str[:-1]
Out[168]: 
0    id_0,id_2
1         id_0
2         id_1
3    id_0,id_1
4         id_2
5             
dtype: object

答案 1 :(得分:3)

让我们试试np.argwhere + groupby

v = np.argwhere(df.values).T
(pd.DataFrame(
       df.columns[v[1]], index=df.index[v[0]], columns=['result']
   ).groupby(level=0).agg(','.join).reindex(df.index)
)

      result
0  id_0,id_2
1       id_0
2       id_1
3  id_0,id_1
4       id_2
5        NaN

答案 2 :(得分:2)

使用applyfilter

df.mul(df.columns).apply(lambda x: ','.join(filter(bool, x)), 1)

0    id_0,id_2
1         id_0
2         id_1
3    id_0,id_1
4         id_2
5             
dtype: object

答案 3 :(得分:1)

一种方法是尝试将lambdazip.join一起使用:

df.apply(lambda x: ','.join(c for c, i in zip(x.index, x.values) if i != 0), axis=1)

结果:

0    id_0,id_2
1         id_0
2         id_1
3    id_0,id_1
4         id_2
5             
dtype: object

答案 4 :(得分:1)

试试这个:

df['New'] = [','.join([str(df.columns[x]) for x,y in enumerate(list(i[-1])) if y==1]) for i in df.iterrows()]
print(df['New'])

输出:

0    id_0,id_2
1         id_0
2         id_1
3    id_0,id_1
4         id_2
5             
Name: New, dtype: object