pandas:合并两列,每隔一行

时间:2016-11-15 23:05:32

标签: python pandas

我有以下pandas df:

      original      mean
   0  0.000000  0.065500
   1  0.131000  0.135890
   2  0.140779  0.144875
   3  0.148971  0.150029
   4  0.151088  0.144309

如何将2列合并为:

      original
   0  0.000000
   1  0.065500
   2  0.131000
   3  0.135890
   4  0.140779  
   5  0.144875
   6  0.148971  
   7  0.150029
   8  0.151088  
   9  0.144309

2 个答案:

答案 0 :(得分:4)

使用stack()方法:

In [2]: df
Out[2]:
   original      mean
0  0.000000  0.065500
1  0.131000  0.135890
2  0.140779  0.144875
3  0.148971  0.150029
4  0.151088  0.144309

In [3]: df.stack()
Out[3]:
0  original    0.000000
   mean        0.065500
1  original    0.131000
   mean        0.135890
2  original    0.140779
   mean        0.144875
3  original    0.148971
   mean        0.150029
4  original    0.151088
   mean        0.144309
dtype: float64

In [4]: df.stack().reset_index(level=[0,1], drop=True)
Out[4]:
0    0.000000
1    0.065500
2    0.131000
3    0.135890
4    0.140779
5    0.144875
6    0.148971
7    0.150029
8    0.151088
9    0.144309
dtype: float64

答案 1 :(得分:3)

您可以在值上调用reshape并构建另一个df:

In [7]:
pd.DataFrame(data=df.values.reshape(df.shape[0]*2,-1), columns=['original'])

Out[7]:
   original
0  0.000000
1  0.065500
2  0.131000
3  0.135890
4  0.140779
5  0.144875
6  0.148971
7  0.150029
8  0.151088
9  0.144309

<强>计时

在您的样本数据集上:

In [8]:
%timeit df.stack().reset_index(level=[0,1], drop=True)
%timeit pd.DataFrame(data=df.values.reshape(df.shape[0]*2,-1), columns=['original'])

1000 loops, best of 3: 820 µs per loop
1000 loops, best of 3: 446 µs per loop

在numpy阵列上重塑几乎是这里的两倍