This question already has answers here:
How to melt 2 columns at the same time?
(2个答案)
在6个月前关闭。
df有
df想要
希望实现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创建-寻找更快的解决方案
输出:
(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