我有一个包含3个布尔列的数据框:
A B C
0 True False False
1 False True False
2 True Nan False
3 False False True
...
每次只有一列是真的,但可能有Nan。
我想获得一个列名列表,其中根据布尔值选择名称。所以对于上面的例子:
['A', 'B', 'A', 'C']
这是一个简单的矩阵运算,不知道如何将它映射到pandas ......
答案 0 :(得分:2)
您可以在数据框和数据框列之间使用mul
运算符。这导致True
个单元格包含列名称,False
个单元格为空。最终你可以对行数据求和:
df.mul(df.columns).sum(axis=1)
Out[44]:
0 A
1 B
2 A
3 C
答案 1 :(得分:0)
您可以使用适当的索引索引列名称,即df.columns
:
>>> import numpy as np
>>> df.columns[(df * np.arange(df.values.shape[1])).sum(axis=1)]
Index([u'A', u'B', u'A', u'C'], dtype=object)
解释
表达
>>> df * np.arange(df.values.shape[1])
A B C
0 0 0 0
1 0 1 0
2 0 0 0
3 0 0 2
为每列计算一个合适的索引,然后用
对矩阵求值row-wize>>> (df * np.arange(df.values.shape[1])).sum(axis=1)
0 0
1 1
2 0
3 2
dtype: int32