Python Pandas:将几个布尔列转换为由布尔列名组成的(可能重复的)列

时间:2012-09-25 17:24:35

标签: python boolean dataframe pandas multiple-columns

假设我有以下DataFrame:

>>> dfrm = pandas.DataFrame({
                             "A":[1,2,3], 
                             "id1":[True, True, False], 
                             "id2":[False, True, False]
                            })

>>> dfrm
   A    id1    id2
0  1   True  False
1  2   True   True
2  3  False  False

如何将两个布尔列展平为一个新列(可能会导致需要重复DataFrame的行),以便在新列中显示所有True事件的条目。

具体来说,在上面的例子中,我希望输出看起来像这样:

index A   id1    id2   all_ids
    0 1  True  False       id1
    1 2  True   True       id1
    1 2  True   True       id2
    2 3 False  False       NaN

(最好不要在all_ids上进行多重索引,但如果这是唯一的方法,我会接受它。)

我经常把这看作是“从长到宽”,反之(从一列到一堆布尔)都是“长到宽”。

Pandas有没有内置的支持?

1 个答案:

答案 0 :(得分:1)

副手我不记得一个在熊猫中做这个的功能作为一个单行,但你可以做这样的事情:

In [35]: st = dfrm.ix[:, ['id1', 'id2']].stack()

In [36]: all_ids = Series(st.index.get_level_values(1), 
                          st.index.get_level_values(0),
                          name='all_ids')[st.values]

In [37]: dfrm.join(all_ids, how='left')
Out[37]: 
   A    id1    id2 all_ids
0  1   True  False     id1
1  2   True   True     id1
1  2   True   True     id2
2  3  False  False     NaN