Python 如何根据行值获取熊猫中的列名?
我有一个数据帧,df: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
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在这种情况下有什么帮助