假设我有下面的数据框:
>>> 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
如何将两个 boolean 列展平为一个新列(这可能会导致 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
上建立多重索引,但如果这是唯一的方法,我会采取这种做法)。
我通常将其视为“从宽到长”,并将其相反(从一列到一堆 boolean 值)视为“从长到宽”。
Pandas 中有对此的内置支持吗?
最佳答案
我不记得在 pandas 中作为一句台词执行此操作的函数,但您可以执行以下操作:
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
关于Python Pandas : converting several boolean columns into a (possibly repeated) column made up of the boolean column names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12588031/