pandas将列合并为单个时间序列

时间:2013-12-15 22:45:30

标签: python pandas

我有一个包含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 ......

2 个答案:

答案 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