python在一个步骤中在多个列上进行数据融合/透视

python在一个步骤中在多个列上进行数据融合/透视,python,pandas,pivot,melt,Python,Pandas,Pivot,Melt,df拥有 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 期待着(寒冷和科尔变冷,科尔和科尔变冷)。 实际上,我有比cola和colb更多的列(大约50列)不会被旋转,只有最后4列被旋转成2列 已尝试: pd.melt(df_h

df拥有

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
期待着(寒冷和科尔变冷,科尔和科尔变冷)。 实际上,我有比cola和colb更多的列(大约50列)不会被旋转,只有最后4列被旋转成2列

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


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

重命名
列,然后从
宽到长

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
输出:
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