熊猫:多列成一列

时间:2014-05-01 14:47:01

标签: python pandas

我有以下数据(2列,4行):

第1栏:A,B,C,D

第2栏:E,F,G,H

我正在尝试将列组合成一列,看起来像这样(1列,8行):

第3列:A,B,C,D,E,F,G,H

我正在使用pandas DataFrame并且尝试使用不同的函数但没有成功(append,concat等等)。任何帮助都将非常感激!

4 个答案:

答案 0 :(得分:8)

你可以这样做,虽然我不确定你为什么要这样做:

In [227]:

df = pd.DataFrame({'Column 1':['A', 'B', 'C', 'D'],'Column 2':['E', 'F', 'G', 'H']})
df
Out[227]:
  Column 1 Column 2
0        A        E
1        B        F
2        C        G
3        D        H

[4 rows x 2 columns]

In [228]:

df['Column 1'].append(df['Column 2']).reset_index(drop=True)
Out[228]:
0    A
1    B
2    C
3    D
4    E
5    F
6    G
7    H
dtype: object

答案 1 :(得分:4)

您似乎要求的仅仅是创建另一个数据视图的帮助。如果没有理由这些数据首先在两列中,那么只需创建一列。但是,如果您需要将它们组合在一些其他工具中进行演示,您可以执行以下操作:

import itertools as it, pandas as pd
df = pd.DataFrame({1:['a','b','c','d'],2:['e','f','g','h']})
sorted(it.chain(*df.values))
# -> ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

答案 2 :(得分:3)

您可以使用ravel在列方向上展平值,速度更快。

In [1238]: df
Out[1238]:
  Column 1 Column 2
0        A        E
1        B        F
2        C        G
3        D        H

In [1239]: pd.Series(df.values.ravel('F'))
Out[1239]:
0    A
1    B
2    C
3    D
4    E
5    F
6    G
7    H
dtype: object

详细

In [1245]: df.shape
Out[1245]: (4000, 2)

In [1246]: %timeit pd.Series(df.values.ravel('F'))
10000 loops, best of 3: 86.2 µs per loop

In [1247]: %timeit df['Column 1'].append(df['Column 2']).reset_index(drop=True)
1000 loops, best of 3: 816 µs per loop

In [1249]: df.shape
Out[1249]: (40000, 2)

In [1250]: %timeit pd.Series(df.values.ravel('F'))
10000 loops, best of 3: 87.5 µs per loop

In [1251]: %timeit df['Column 1'].append(df['Column 2']).reset_index(drop=True)
100 loops, best of 3: 1.72 ms per loop

答案 3 :(得分:2)

诀窍是使用stack()

df.stack().reset_index()

   level_0   level_1  0
0        0  Column 1  A
1        0  Column 2  E
2        1  Column 1  B
3        1  Column 2  F
4        2  Column 1  C
5        2  Column 2  G
6        3  Column 1  D
7        3  Column 2  H