Python 如果pyhton中的列名为true,如何将多列中的列名转换为一列?
我有一个数据框Python 如果pyhton中的列名为true,如何将多列中的列名转换为一列?,python,pandas,Python,Pandas,我有一个数据框 A B C True False False False False True True False False False False False 我想得到一个名为“result”的列,如果为true,它将返回列名,如果其中任何一个为true,则返回nan 期望列 result A C A na 您可以使用将列值设置为沿第二个轴的,因此第一个True,或NaN,这取决于df的结果。任意(1): 或者,对于基于numpy的,您可以使用
A B C
True False False
False False True
True False False
False False False
我想得到一个名为“result”的列,如果为true,它将返回列名,如果其中任何一个为true,则返回nan
期望列
result
A
C
A
na
您可以使用将列值设置为沿第二个轴的,因此第一个True
,或NaN
,这取决于df的结果。任意(1)
:
或者,对于基于numpy
的,您可以使用argmax
:
import numpy as np
df['result'] = np.where(df.values.any(1), df.columns[df.values.argmax(1)], np.nan)
您可以使用将列值设置为沿第二个轴的,因此第一个
True
,或NaN
,这取决于df的结果。任意(1)
:
或者,对于基于numpy
的,您可以使用argmax
:
import numpy as np
df['result'] = np.where(df.values.any(1), df.columns[df.values.argmax(1)], np.nan)
您可以简单地按相反顺序迭代列:
for col in reversed(df.columns):
df.loc[df[col],'result'] = col
它给出:
A B C result
0 True False False A
1 False False True C
2 True False False A
3 False False False NaN
您可以简单地按相反顺序迭代列:
for col in reversed(df.columns):
df.loc[df[col],'result'] = col
它给出:
A B C result
0 True False False A
1 False False True C
2 True False False A
3 False False False NaN
IIUCdot
df.dot(df.columns)
0 A
1 C
2 A
3
dtype: object
IIUCdot
df.dot(df.columns)
0 A
1 C
2 A
3
dtype: object
如果a和b都是真的呢?在这种情况下会发生什么?@Amit:第一个正确的列获胜。如果a和b都是正确的呢?在这种情况下会发生什么?@Amit:第一个真正的列获胜。**我的问题是我有一个大约300列的大型数据集,我想选择选定的列并完成这件事。所以我不能接受df.column**然后在列列表上索引数据帧。因此,将所有
df
更改为df[my_list_of_columns]
能否请您编辑相同的答案,以便每个人都能更容易地看到。否。答案回答了最初提出的问题。如果我现在改变答案,可能会误导未来的访客。另外,请不要忘记您可以接受和投票的答案,谢谢@amit**我的问题是我有一个大约300列的大型数据集,我想选择所选的列并完成这项工作。所以我不能接受df.column**然后在列列表上索引数据帧。因此,将所有df
更改为df[my_list_of_columns]
能否请您编辑相同的答案,以便每个人都能更容易地看到。否。答案回答了最初提出的问题。如果我现在改变答案,可能会误导未来的访客。另外,请不要忘记您可以接受和投票的答案,谢谢@阿密特