将宽数据转换为长数据格式

时间:2020-10-22 13:27:39

标签: python pandas

我有以下形式的数据集:

 ID  col1  col2  col3 

 a   0     1     0    

 b   1     0     0    

 c   1     0     0 

我想将其转换为以下形式:

 ID  value 

 a   col2  
 b   col1  
 c   col1 

1 个答案:

答案 0 :(得分:0)

每个ID的n列解决方案

df2 = df.melt('ID', var_name='value', value_name='n').loc[lambda df: df['n'].eq(1)]
new_df = df2.pivot_table(index='ID', 
                         columns=df2.groupby('ID').cumcount().add(1),
                         values=['value'], aggfunc='first')
new_df = (new_df.set_axis([f'{x}{y}' for x, y in new_df.columns], axis=1)
                .reset_index())
print(new_df)

输出

  ID value1
0  a   col2
1  b   col1
2  c   col1

另一个样本

ID  col1  col2  col3 

 a   0     1     0    

 b   1     1     0    

 c   1     0     1 

输出

  ID value1 value2
0  a   col2    NaN
1  b   col1   col2
2  c   col1   col3