使用列标题堆叠Pandas数据框

时间:2019-02-25 18:09:49

标签: pandas

我有一个数据框

   Date   Brand    Value_A    Value_B    Metric_A   Metric_b
1   xx      dd      1          6           A          d
2   xx      dd      2          5           A          D
3   zxx     d       3          6           A          f

我想转换两个:

    Date   Brand     Value     Metric
1     xx    dd        1           A     
2     xx    dd        2           A
3     zxx   d         3           A
4     xx    dd        6           d
5     xx    d         5           D
6     zxx   dd        6           f

我不认为melt可以解决此类问题,因为我必须列标题

2 个答案:

答案 0 :(得分:2)

这是一个wide_to_long问题

pd.wide_to_long(df.reset_index(),['Value','Metric'],
                i=['Date','Brand','index'],
                j='drop',sep='_',suffix='\w+').\
        reset_index(level=[0,1])
Out[748]: 
           Date Brand  Value Metric
index drop                         
1     A      xx    dd      1      A
      B      xx    dd      6      d
2     A      xx    dd      2      A
      B      xx    dd      5      D
3     A     zxx     d      3      A
      B     zxx     d      6      f

答案 1 :(得分:1)

制作2个单独的数据框,重命名列并合并

df1 = df[['Date','Brand','Value_A','Metric_A']]
df2 = df[['Date','Brand','Value_B','Metric_B']]

coluns = ['Date','Brand','Value','Metric']

df1.columns = coluns
df2.columns = coluns

df_full = pd.concat([df1,df2], ignore_index = True)