我有以下数据(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等等)。任何帮助都将非常感激!
答案 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