按二进制列值重塑 Pandas DatafRames

Reshape Pandas DatafRames by binary columns value

无法弄清楚如何通过多个二进制列值将我的 DataFrame 重塑为新的 DataFrame。

输入:

data         code    a  b   c

2016-01-07   foo     0  0   0
2016-01-12   bar     0  0   1
2016-01-03   gar     0  1   0
2016-01-22   foo     1  1   0
2016-01-26   bar     1  1   0

我想按二进制值重塑,即列 a/b/c,如果它们的值 == 1,我每次都需要新列 包含所有数据。

预期输出:

         data       code        
  a   2016-01-22    foo      
  a   2016-01-26    bar       
  b   2016-01-03    gar     
  b   2016-01-22    foo      
  b   2016-01-26    bar       
  c   2016-01-12    bar       

从早上卡在这里,非常感谢帮助!

使用DataFrame.melt with filtering 1 in boolean indexing, DataFrame.pop用于过滤后去除柱子:

df = df.melt(['data','code'], var_name='type')
df = df[df.pop('value').eq(1)]
print (df)
          data code type
3   2016-01-22  foo    a
4   2016-01-26  bar    a
7   2016-01-03  gar    b
8   2016-01-22  foo    b
9   2016-01-26  bar    b
11  2016-01-12  bar    c