我有一個熊貓數據幀像這樣的結構:在數據幀堆棧兩列,重複別人
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', 'let2', 'num1', '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
不過,我敢肯定,有一個更簡單的方法實現這一點,而不需複製到虛擬變量和此類變通方法。
任何想法?
你這樣做可以簡化爲'pd.lreshape(DF,{ 'letval' 的一部分: 'let1', 'let2'], 'numval' :['num1','num2']})'。它不是一個記錄良好的功能,因此添加它作爲評論。 – ayhan
@ayhan,這是一個完美的解決方案 - 把它作爲一個答案 – MaxU
@MaxU不幸的是,這只是Luis已經做到的部分解決方案。它失去了let和num指標列。 – ayhan