2016-10-03 121 views
0

我有一个包含许多列的数据框,其中包含true/false值。例如,生成DataFrame的列名称与条件匹配的系列

import pandas as pd 
data = pd.DataFrame([[True, True, False], 
        [False, False, True], 
        [True, False, True], 
        [False, False, False], 
        [True, True, False]], 
        columns=['A','B','C']) 

实际上除了这三列以外还有很多。

我需要生成一个额外的列,其中每个值是所有列的名称的列表中值为true。对于这个例子,这应该是:

0 [A, B] 
1  [C] 
2 [A, C] 
3  [] 
4 [A, B] 
Name: X, dtype: object 

有什么魔术在熊猫实现这一目标,而无需使用嵌套循环(这是我至今唯一的想法)?

回答

1

您可以使用apply方法来遍历行,并使用每个行子集的列名:

data.apply(lambda r: data.columns[r].tolist(), axis = 1) 

#0 [A, B] 
#1  [C] 
#2 [A, C] 
#3  [] 
#4 [A, B] 
#dtype: object 
+0

谢谢,这就是我一直在寻找。 – Ale