Python 如何根据行值获取熊猫中的列名?

Python 如何根据行值获取熊猫中的列名?,python,pandas,dataframe,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

我有一个数据帧,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
0    id_0,id_2
1         id_0
2         id_1
3    id_0,id_1
4         id_2
5             
dtype: object

让我们试试
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
使用
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

一种方法是尝试将
lambda
zip
一起使用

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

           result
0         id_0, id_2
1         id_0
2         id_1
3         id_0, id_1
4         id_2
5         NaN
0    id_0,id_2
1         id_0
2         id_1
3    id_0,id_1
4         id_2
5             
dtype: object
试试这个:

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

使用
应用
过滤器

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

df.dot(df.columns+“,”).str[:-1]。替换(“”,np.nan)
用nanc替换empty你知道这是怎么回事吗?我不明白x.index和x.values在这种情况下有什么帮助