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
IIUC
dot

df.dot(df.columns)
0    A
1    C
2    A
3     
dtype: object
IIUC
dot

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]
能否请您编辑相同的答案,以便每个人都能更容易地看到。否。答案回答了最初提出的问题。如果我现在改变答案,可能会误导未来的访客。另外,请不要忘记您可以接受和投票的答案,谢谢@阿密特