This question already has answers here:
How to melt 2 columns at the same time?
                                
                                    (2个答案)
                                
                        
                                在6个月前关闭。
            
                    
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和cole变为colD,colf和colg变为colE)。
实际上,与可乐和可乐相比,我的列要多得多(约50列),它们不会被旋转,只有最后四个会被旋转成2列。

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

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

最佳答案

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

08-25 06:27