根据预定义的行数重塑(堆栈)pandas数据帧

时间:2015-05-15 20:34:01

标签: python pandas

我有一个pandas数据框,看起来像一个长行。

          0     1     2     3     4     5     6     7     8     9     10    11    12    13    14
________________________________________________________________________________________________
2010 |   0.1   0.5   0.5   0.7   0.5   0.5   0.5   0.5   0.9   0.5   0.5   0.8    0.3    0.3    0.6

我想重塑它:

          0     1     2     3     4    
____________________________________
     |0| 0.1   0.5   0.5   0.7   0.5   
2010 |1| 0.5   0.5   0.5   0.9   0.5   
     |2| 0.5   0.8   0.3   0.3   0.6

我当然可以使用循环来做,但我猜(un)stack和/或pivot可能会做到这一点,但我无法弄清楚如何...

对称/填充空白 - 如果数据不是整数可以被拆散后的行数整除 - 现在不重要。

编辑:

我同时编写了循环解决方案:

df=my_data_frame
dk=pd.DataFrame()
break_after=3
for i in range(len(df)/break_after):
    dl=pd.DataFrame(df[i*break_after:(i+1)*break_after]).T
    dl.columns=range(break_after)
    dk=pd.concat([dk,dl])

1 个答案:

答案 0 :(得分:1)

如果只有一个索引(2010),这将正常工作。

df1 = pd.DataFrame(np.reshape(df.values,(3,5)))
df1['Index'] = '2010'
df1.set_index('Index',append=True,inplace=True)
df1 = df1.reorder_levels(['Index', None])

输出:

           0    1    2    3    4
Index                           
2010  0  0.1  0.5  0.5  0.7  0.5
      1  0.5  0.5  0.5  0.9  0.5
      2  0.5  0.8  0.3  0.3  0.6