在pandas中将多行连接到一行

时间:2016-01-06 19:53:53

标签: python python-2.7 pandas

我有以下数据(这只是一小部分,实际数据中有21行):

    wt_tmin    wt_tmax   wt_prec  wt_sol_rad     wt_ET   
0  33.142857  52.714286  0.031429  114.000000  0.102857    
1  40.142857  66.857143  0.280000  172.714286  0.192857
2  41.714286  67.142857  0.001429  179.714286  0.191429         

我想将所有行连接到一行,如下所示:

0            1          2          3           4       5         6             7       8        9          11        12          13       14         15        
33.142857  52.714286  0.031429  114.000000  0.102857 40.142857  66.857143  0.280000  172.714286  0.192857 41.714286  67.142857  0.001429  179.714286  0.191429

这是我尝试做的事情:

 # K is a pandas dataframe with the  data
 KE = pd.concat([K.icol(0), K.icol(1), K.icol(2), K.icol(3), K.icol(4)], axis=1).T

但这并没有给我想要的结果。请帮忙

4 个答案:

答案 0 :(得分:2)

我通过numpyvalues下拉到reshape到一行,然后从中创建一个新框架:

>>> pd.DataFrame(df.values.reshape(1, -1))
          0          1         2    3         4          5          6     7   \
0  33.142857  52.714286  0.031429  114  0.102857  40.142857  66.857143  0.28   

           8         9          10         11        12          13        14  
0  172.714286  0.192857  41.714286  67.142857  0.001429  179.714286  0.191429  

.reshape(1, -1)基本上意味着“重塑为1行和必要的列数(-1)”。

答案 1 :(得分:2)

df = df.stack().to_frame().T
df.columns = list(range(len(df.columns)))

df = pd.DataFrame(df.stack().to_frame().values).T

会给你:

          0          1         2    3         4          5          6     7   \
0  33.142857  52.714286  0.031429  114  0.102857  40.142857  66.857143  0.28   

           8         9          10         11        12          13        14  
0  172.714286  0.192857  41.714286  67.142857  0.001429  179.714286  0.191429  

答案 2 :(得分:1)

您可以使用pandas melt,然后您无需为此致电pd.DataFrame

In [1470]: pd.melt(df, var_name='var', value_name='0').drop('var', axis=1).T
Out[1470]: 
          0          1          2          3          4          5         6   \
0  33.142857  40.142857  41.714286  52.714286  66.857143  67.142857  0.031429   

     7         8    9           10          11        12        13        14  
0  0.28  0.001429  114  172.714286  179.714286  0.102857  0.192857  0.191429 

答案 3 :(得分:0)

如果您不需要数据框,可以使用numpy.array.flatten

>>> d = pandas.DataFrame([[1, 2], [3, 4], [5, 6]])
>>> d
   0  1
0  1  2
1  3  4
2  5  6
>>> d.as_matrix().flatten()
array([1, 2, 3, 4, 5, 6])