我有一个像这样的结构的pandas DataFrame:
df = pd.DataFrame( [
[ 'foo1','a','z','bar1',1,4 ],[ 'foo2','b','y','bar2',2,5 ],[ 'foo3','c','x','bar3',3,6 ]
] )
df.columns = [ 'foo','let1','let2','bar','num1','num2' ]
print( df )
foo let1 let2 bar num1 num2
0 foo1 a z bar1 1 4
1 foo2 b y bar2 2 5
2 foo3 c x bar3 3 6
我想堆叠列let1和let2,并添加一个标签告诉它们来自哪里. num1和num2也是如此.最后,我想实现这个目标:
foo let letval bar num numval
0 foo1 let1 a bar1 num1 1
1 foo2 let1 b bar2 num1 2
2 foo3 let1 c bar3 num1 3
3 foo1 let2 z bar1 num2 4
4 foo2 let2 y bar2 num2 5
5 foo3 let2 x bar3 num2 6
到目前为止,我已经这样做了:
let = pd.concat( [ df.let1,df.let2 ] )
num = pd.concat( [ df.num1,df.num2 ] )
df = df.drop( ['let1','num2' ],axis=1 )
df = pd.concat( [ df,df ] )
df[ 'letval' ] = let
df[ 'numval' ] = num
print( df )
foo bar letval numval
0 foo1 bar1 a 1
1 foo2 bar2 b 2
2 foo3 bar3 c 3
0 foo1 bar1 z 4
1 foo2 bar2 y 5
2 foo3 bar3 x 6
但是,我很确定有一种更简单的方法可以实现这一点,而无需复制到虚拟变量和此类变通方法.
有任何想法吗?