pandas:具有不同列名的concat数据框

时间:2015-12-15 06:57:41

标签: python pandas

假设我有这个数据框

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

我希望将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')

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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