2015-12-15 60 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