2015-12-15 90 views
2

假設我有這個數據幀大熊貓:用不同的列名的concat數據幀

id x y 
0 a hello 
0 b test 
1 c hi 
2 a hi 
3 d bar 

我想Concat的X和Y到像這樣的單個列保持它們的ID

id x 
0 a 
0 b 
1 c 
2 a 
3 d 
0 hello 
0 test 
1 hi 
2 hi 
3 bar 

又如何如果我想爲concat列給出一個新名稱? (例如, 'X' 到 'XY')

+0

我不希望我的ID設置爲指數做。它應該仍然是一列 – arkisle

回答

1

我不認爲pandas.concat包括設置新的column(see docs)的選項,但你可以指定像這樣:

id x  y 
0 0 a hello 
1 0 b test 
2 1 c  hi 
3 2 a  hi 
4 3 d bar 

df.set_index('id', inplace=True) 
pd.DataFrame(pd.concat([df.x, df.y]), columns=['xy']).reset_index() 

    id  xy 
0 0  a 
1 0  b 
2 1  c 
3 2  a 
4 3  d 
5 0 hello 
6 0 test 
7 1  hi 
8 2  hi 
9 3 bar 
+0

我不希望我的id設置爲索引。它應該仍然是相應更新的列 – arkisle

+0

。 – Stefan

+0

這產生了錯誤的結果。結果中的id列是索引,而不是id。所以它產生{'id':[0,1,2,3,4,0,1,2,3,4]} – arkisle

1

起價

如果行的順序並不重要,你可以使用stack

print df 
    id x  y 
0 0 a hello 
1 0 b test 
2 1 c  hi 
3 2 a  hi 
4 3 d bar 

s = df.set_index('id').stack() 
s.index = s.index.droplevel(-1) 
s.name = 'xy' 

print pd.DataFrame(s).reset_index() 
    id  xy 
0 0  a 
1 0 hello 
2 0  b 
3 0 test 
4 1  c 
5 1  hi 
6 2  a 
7 2  hi 
8 3  d 
9 3 bar 
+0

我不希望我的id設置爲索引。它應該仍然是一列 – arkisle

+0

然後你可以重置索引。沒問題。或者它有問題嗎? – jezrael

+0

是的。這也適用。但我認爲斯蒂芬的答案要簡單得多。 – arkisle