Skip to content
Advertisement

Reshape Pandas DatafRames by binary columns value

Can’t figure out how to reshape my DataFrame into new one by several binary columns value.

Input:

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

I want to reshape by binary values, i.e. column a/b/c, if their value == 1, I need every time new column with all data.

Expected output:

         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       

Stucked here from the morning, will appreciate help very much !

Advertisement

Answer

Use DataFrame.melt with filtering 1 in boolean indexing, DataFrame.pop is used for removing column after filtration:

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
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement