一步即可在多个列上融化/旋转python pandas

时间:2019-06-04 15:44:37

标签: python pandas pivot melt

df有

cola  colb  colc cold cole colf  colg
1      x     y     10   15   20   25     
2      x     y     11   16   27   28
3      x     y     12   14   20   30

df想要

cola  colb  colc colD colE
1      x     y     10   20        
1      x     y     15   25   
2      x     y     11   27
2      x     y     16   28
3      x     y     12   20
3      x     y     14   30

希望对df进行透视(冷和科尔变成colD,colf和colg变成colE)。 实际上,与可乐和可乐相比,我的列要多得多(约50列),它们不会被旋转,只有最后四个会被旋转成2列。

尝试过: pd.melt(df_have,id_vars = ['cola,colb'],var_name ='colD')

但这需要我将所有50列都添加到id_vars中,并且我只能分多个步骤进行colD创建和colE创建-寻找更快的解决方案

1 个答案:

答案 0 :(得分:3)

rename列,然后wide_to_long

import pandas as pd
df = df.rename(columns={'cold': 'colD_1', 'cole': 'colD_2', 'colf': 'colE_1', 'colg': 'colE_2'})

df = (pd.wide_to_long(df, i=['cola', 'colb', 'colc'], j='drop',
                      stubnames=['colD', 'colE'], sep='_')
        .reset_index().drop(columns='drop'))

输出:

   cola colb colc  colD  colE
0     1    x    y    10    20
1     1    x    y    15    25
2     2    x    y    11    27
3     2    x    y    16    28
4     3    x    y    12    20
5     3    x    y    14    30